He comentado el sed
comando que no entiendes:
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
'
Eliminar 1N
porque solo necesitamos dos líneas en la 'pila' y es suficiente con el segundo N
y cambie /^\n\n$/d;
a /^\n$/d;
para eliminar las dos líneas en blanco consecutivas.
Una prueba:
Contenido de infile
:
1
2
3
4
5
6
7
Ejecute el sed
comando:
sed '
N;
/^\n$/d;
P;
D
' infile
Eso produce:
1
2
3
4
5
6
7
Esto sería más fácil con awk
:
awk -v RS='\n\n\n' 1
Esto sería más fácil con cat
:
cat -s
sed '/^$/{N;/^\n$/d;}'
Eliminará solo dos líneas en blanco consecutivas en un archivo. Puede usar esta expresión solo en el archivo, entonces solo usted puede entenderla completamente. Cuando venga una línea en blanco, entrará entre llaves.
Normalmente, sed leerá una línea. N
agregará la segunda línea al espacio del patrón. Si esa línea es una línea vacía. ambas líneas están separadas por nueva línea.
/^\n$/
este patrón coincidirá con ese tiempo solo el d
trabajará. De lo contrario d
no trabajo. d
se utiliza para eliminar todo el contenido del espacio del patrón y luego comenzar el siguiente ciclo.