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.