#1 Le 31/08/2012, à 22:25
- thurston
[RESOLU] Aide sed awk et printf pour chaine char à manipuler
Bonjour
J'ai une phrase type comme suit (correspond à ce que je dois concaténer d'origine diverses U: m3u, F: file, D: repertoire)
zen:U|/media/zen.m3u#D|/media/mpd-Playlists#U|/tmp/speed.m3u#F|/tmp/song.mp3
EDIT: il manquait un | après le dernier F, corrigé pour cohérence dans l'énoncé
J'aurais voulu conserver tout ce qui est en gras avec une manipulation (sed, awk, printf?...), à savoir pour simplifier et en conservant leur ordre d'apparition dans la phrase (c'est pour rappeler dans une fenetre zenity (les chemins sont bien plus longs que ceux montrés) l'essentiel pour choix):
- toutes les lettres avant |
- tout ce qui se trouve entre le dernier / et le # suivant
- et tout ce qui se trouve entre le tout dernier / et la fin de la phrase.
Le bonus serait d'intercaler
- le caractère : entre U,F,D (type de source) et la source effective réduite au "basename"
- et un + entre les blocs indiquant la concaténation.
Ca donnerait donc, sur l'exemple:
U:zen.m3u + D:mpd-Playlists + U:speed.m3u + F:song.mp3
je bidouille depuis + d'1/2 heure google + autre...mais y a pas, moi pas parler sed. (m'a semblé indiqué, avec awk et printf...)
Quelqu'un peut etre?
D'avance merci
A+
T
Dernière modification par thurston (Le 01/09/2012, à 08:52)
Hors ligne
#2 Le 31/08/2012, à 22:37
- Bousky
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Je considère qu'il doit y avoir un "|" derrière le "F" et que c'est un oubli dans ton exemple. Pas testé (je suis pas sous Linux pour l'instant) :
sed -r 's-\([UFD]\)\|[^#]*/\([^/#]\)-\1:\2-g;s/#/ + /g'
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#3 Le 01/09/2012, à 07:19
- pingouinux
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Bonjour,
C'était presque bon, mais sans pouvoir tester, ce n'est pas facile…
$ sed -r 's/^[^:]*://;s-([UFD])\|[^#]*/([^/#])-\1:\2-g;s/#/ + /g' <<<"zen:U|/media/zen.m3u#D|/media/mpd-Playlists#U|/tmp/speed.m3u#F|/tmp/song.mp3"
U:zen.m3u + D:mpd-Playlists + U:speed.m3u + F:song.mp3
Hors ligne
#4 Le 01/09/2012, à 08:51
- thurston
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Ah zut, désolé pour l'énoncé inexact. Non de non, pourtant j'avais voulu que ce soit clair.
J'ai corrigé dans le premier test et merci encore à tous les 2, ca va vraiment rendre mon interface de script super efficace
(J'étais loin d'y arriver au fait, malgré google et autre).
A+
T
@pingouinux: il va bientot plus rester grand chose qui n'a pas été touché par tes soins dans mon gros script de traitement de biblio mp3. Le résultat est quasi atteint et ces derniers détails d'interface fignolent le tout vraiment bien. Tu avais bien sûr repéré la continuité dans mes différents posts. (je prépare le post décrivant le principe: montré à des potes et validé à l'utilisation par des non-informaticiens de 4 à 42 ans pour l'instant.)
Dernière modification par thurston (Le 01/09/2012, à 08:57)
Hors ligne
#5 Le 01/09/2012, à 09:08
- Bousky
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Il me semble que l'on peut simplifier (toujours pas testé) :
$ sed 's/^[^:]*://;s-\|[^#]*/-:-g;s/#/ + /g'
On doit pouvoir le faire en trois substitutions bash
Dernière modification par Bousky (Le 01/09/2012, à 09:14)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#6 Le 01/09/2012, à 11:47
- pingouinux
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Après test de l'expression de Bousky #5, voici ce qui marche :
$ sed 's/^[^:]*://;s-|[^#]*/-:-g;s/#/ + /g' <<<"zen:U|/media/zen.m3u#D|/media/mpd-Playlists#U|/tmp/speed.m3u#F|/tmp/song.mp3"
U:zen.m3u + D:mpd-Playlists + U:speed.m3u + F:song.mp3
Avec sed, selon que l'on utilise l'option -r ou pas, il faut mettre ou pas des \ devant | , ( et ) . C'est vraiment piégeant.
Hors ligne
#7 Le 01/09/2012, à 12:49
- thurston
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
ok merci cette dernière version m'est en plus abordable (je veux dire pour compréhension et réutilisation dans d'autres contextes similaires)
A+
T
Hors ligne
#8 Le 01/09/2012, à 13:34
- Bousky
Re : [RESOLU] Aide sed awk et printf pour chaine char à manipuler
Avec sed, selon que l'on utilise l'option -r ou pas, il faut mettre ou pas des \ devant | , ( et ) . C'est vraiment piégeant.
Sachant que c'est inversé entre | et ()
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne