Simple mais penible avec SED
Résolu
alexgtk
-
alexgtk -
alexgtk -
Bonjour a tous,
Je me casse un peu la tete sur sed, j'arrive a passer certaines commandes sous vim et je ne trouve pas leur equivalent sur sed (je voudrais eviter vi -c pour mon script).
Supposons que je veuille supprimer une ligne vide entre deux lignes particulieres, j'utilise la syntaxe vim suivante pour matcher un pattern contenant une ligne vide :
:%s/TOTO\n\n\(.*\)TOTO/TOTO\n\1TOTO/g
Cette commande aura pour effet de retirer une ligne vide qui est comprise entre deux lignes finissant par TOTO.
Neanmoins, sed ne permet pas de matcher les \n aussi simplement, et
sed -i 's/TOTO\n\n\(.*\)TOTO/TOTO\n\1TOTO/g' me fonctionne pas (pas non plus en remplacant \n par \r ou ^$)
Quelqu'un aurait-il une idee ?
merci bcp
Je me casse un peu la tete sur sed, j'arrive a passer certaines commandes sous vim et je ne trouve pas leur equivalent sur sed (je voudrais eviter vi -c pour mon script).
Supposons que je veuille supprimer une ligne vide entre deux lignes particulieres, j'utilise la syntaxe vim suivante pour matcher un pattern contenant une ligne vide :
:%s/TOTO\n\n\(.*\)TOTO/TOTO\n\1TOTO/g
Cette commande aura pour effet de retirer une ligne vide qui est comprise entre deux lignes finissant par TOTO.
Neanmoins, sed ne permet pas de matcher les \n aussi simplement, et
sed -i 's/TOTO\n\n\(.*\)TOTO/TOTO\n\1TOTO/g' me fonctionne pas (pas non plus en remplacant \n par \r ou ^$)
Quelqu'un aurait-il une idee ?
merci bcp
A voir également:
- Simple mais penible avec SED
- 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
- Simple comic - Télécharger - Vie quotidienne
6 réponses
Salut,
;-))
jp@MDK:~/tmpfs ssh$ cat toto Ligne finissant par TOTO Une autre ligne finissant par TOTO jp@MDK:~/tmpfs ssh$ sed '/TOTO$/,/TOTO$/{/^$/d}' toto Ligne finissant par TOTO Une autre ligne finissant par TOTO jp@MDK:~/tmpfs ssh$
;-))
On se rapproche fortement de ce que je recherche !
La difference reste qu avec la syntaxe precedente sous vim, les pattern qui correspondaient ne contenaient qu une seule ligne ET qui est vide, c est a dire :
...TOTO
...TOTO
c est bon, mais
..TOTO
blabla
...TOTO
c est pas bon (idem si plusieurs lignes vides)
La difference reste qu avec la syntaxe precedente sous vim, les pattern qui correspondaient ne contenaient qu une seule ligne ET qui est vide, c est a dire :
...TOTO
...TOTO
c est bon, mais
..TOTO
blabla
...TOTO
c est pas bon (idem si plusieurs lignes vides)
Fallait commencer directement par là ;-))
;-))
jp@MDK:~/tmpfs ssh$ cat toto Ligne finissant par TOTO Une autre ligne finissant par TOTO Autre ligne finissant par TOTO blabla blablabla blabla blablabla Et une dernière en TOTO jp@MDK:~/tmpfs ssh$ sed '/TOTO$/,/TOTO$/{//!d}' toto Ligne finissant par TOTO Une autre ligne finissant par TOTO Autre ligne finissant par TOTO Et une dernière en TOTO jp@MDK:~/tmpfs ssh$
;-))
aaaagh toutes mes excuses je me suis mal exprime
quand je disais 'c'est pas bon', je voulais dire que je souhaitais que le pattern ne match pas, idealement ce que je cherche est donc :
jp@MDK:~/tmpfs ssh$ cat toto
Ligne finissant par TOTO
Une autre ligne finissant par TOTO
Autre ligne finissant par TOTO
blabla
blablabla
blabla
blablabla
Et une dernière en TOTO
jp@MDK:~/tmpfs ssh$ sed 'commande magique' toto
Ligne finissant par TOTO
Une autre ligne finissant par TOTO
Autre ligne finissant par TOTO
blabla
blablabla
blabla
blablabla
Et une dernière en TOTO
j'espere que c'est plus clair mais du coup c'est surement moins simple...
quand je disais 'c'est pas bon', je voulais dire que je souhaitais que le pattern ne match pas, idealement ce que je cherche est donc :
jp@MDK:~/tmpfs ssh$ cat toto
Ligne finissant par TOTO
Une autre ligne finissant par TOTO
Autre ligne finissant par TOTO
blabla
blablabla
blabla
blablabla
Et une dernière en TOTO
jp@MDK:~/tmpfs ssh$ sed 'commande magique' toto
Ligne finissant par TOTO
Une autre ligne finissant par TOTO
Autre ligne finissant par TOTO
blabla
blablabla
blabla
blablabla
Et une dernière en TOTO
j'espere que c'est plus clair mais du coup c'est surement moins simple...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En gros on ne supprime une ligne vide que si la ligne précédente et la suivante finissent par TOTO ?
Un truc comme ça devrait aller :
;-))
Un truc comme ça devrait aller :
jp@MDK:~/tmpfs ssh$ cat toto Ligne finissant par TOTO Une autre ligne finissant par TOTO bliblibli Autre ligne finissant par TOTO blabla blablabla blabla blablabla Et une dernière en TOTO jp@MDK:~/tmpfs ssh$ sed '/TOTO$/{:z;N;s/\(.*TOTO\n\)\n\(.*TOTO\)$/\1\2/;Tz};' toto Ligne finissant par TOTO Une autre ligne finissant par TOTO bliblibli Autre ligne finissant par TOTO blabla blablabla blabla blablabla Et une dernière en TOTO jp@MDK:~/tmpfs ssh$
;-))