GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser sed pour supprimer uniquement les doubles lignes vides ?

J'ai commenté le sed commande que vous ne comprenez pas :

sed '
    ## In first line: append second line with a newline character between them.
    1N;
    ## Do the same with third line.
    N;
    ## When found three consecutive blank lines, delete them. 
    ## Here there are two newlines but you have to count one more deleted with last "D" command.
    /^\n\n$/d;
    ## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
    ## a line from the other side.
    P;
    D
'

Supprimer 1N car nous n'avons besoin que de deux lignes dans la 'pile' et c'est suffisant avec la seconde N , et modifiez /^\n\n$/d; à /^\n$/d; pour supprimer les deux lignes vierges consécutives.

Un essai :

Contenu de infile :

1


2
3

4



5

6


7

Exécutez le sed commande :

sed '
    N;
    /^\n$/d;
    P;
    D
' infile

Cela donne :

1
2
3

4

5

6
7

Ce serait plus facile avec awk :

awk -v RS='\n\n\n' 1

Ce serait plus facile avec cat :

cat -s

sed '/^$/{N;/^\n$/d;}'

Il ne supprimera que deux lignes vierges consécutives dans un fichier. Vous ne pouvez utiliser cette expression que dans le fichier, alors vous seul pouvez pleinement comprendre. Lorsqu'une ligne vide viendra, elle entrera entre accolades.

Normalement, sed lira une ligne. N ajoutera la deuxième ligne à l'espace du motif. Si cette ligne est une ligne vide. les deux lignes sont séparées par une nouvelle ligne.

/^\n$/ ce modèle correspondra à ce moment-là seulement le d marchera. Sinon d ne fonctionne pas. d est utilisé pour supprimer tout le contenu de l'espace de motif, puis démarrer le cycle suivant.


Linux
  1. Apprendre à utiliser l'éditeur de texte Sed

  2. Comment utiliser Sed pour remplacer une chaîne multiligne ?

  3. Supprimer la ligne contenant une certaine chaîne et la ligne suivante ?

  4. Comment supprimer le caractère \r avec sed

  5. comment supprimer les guillemets doubles dans un csv

Comment utiliser le proxy sur la ligne de commande Linux ?

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

COMMENT UTILISER L'EDITEUR SED

Comment supprimer plusieurs lignes dans Vim