Subsitution // sed

Résolu/Fermé
Utilisateur anonyme - 11 juin 2009 à 15:50
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 11 juin 2009 à 18:44
Bonjour,

dans un fichier texte, comportant une ligne de texte puis deux lignes vides comme suit:

bla bla bla


bla bla bla


bla bla bla

je souhaiterais pouvoir supprimer une ligne vide sur 2 sur tout le texte,

j'ai essayé avec

:%s/^$/d
sed '1~2 s/^$/d ' fichier

rien n'y fait

si vous avez une idée,

en vous remerciant par avance,

PS: je suis sous AIX 5.3

++
Poulpoul

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juin 2009 à 16:00
Salut,

S'il n'y a que deux ligne vides consécutives :
sed '/^$/N;/^\n$/s/^\n$//'
Sinon si plus de deux lignes vides consécutives :
 sed '/^$/{:z;N;/^\n$/s/^\n$//;tz}'
;-))
0
Utilisateur anonyme
11 juin 2009 à 17:19
merci beaucoup Jipicy
c'est impec

y aurait il possibilité de détailler les commandes ?

la première je vois à peu près, la seconde un peu plus complexe ...

merci par avance,
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juin 2009 à 18:11
La 1ère :
'/^$/
Si la ligne est vide

N
On ajoute la suivante

/^\n$/
Si la ligne ne contient qu'un caractère "fin de ligne"

s/^\n$//'
On le supprime

Pour la 2nd :
'/^$/{
Début commandes groupées. Si la ligne est vide

:z
Étiquette

N
On ajoute la suivante

/^\n$/
Si la ligne ne contient qu'un caractère "fin de ligne"

s/^\n$//
On le supprime

tz
Si une substitution a eu lieu, on se branche à l'étiquette

}'
Fin commandes groupées


0
Utilisateur anonyme
11 juin 2009 à 18:42
re,

merci beaucoup pour ces explications très intéressantes

encore merci,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juin 2009 à 18:44
De rien ;-))
0