Subsitution // sed

Résolu
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
Configuration: Ubuntu 7.10 // AIX 5.3

5 réponses

  1. Modérateur
    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
    1. 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
      1. Modérateur
        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
        1. re,

          merci beaucoup pour ces explications très intéressantes

          encore merci,
          0