Subsitution // sed

Résolu
Poulpoul -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. Poulpoul
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. Poulpoul
     
    re,

    merci beaucoup pour ces explications très intéressantes

    encore merci,
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    De rien ;-))
    0