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. re,

    merci beaucoup pour ces explications très intéressantes

    encore merci,
    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


      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,
        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}'
          ;-))