GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich sed, um nur doppelte Leerzeilen zu entfernen?

Ich habe den sed kommentiert Befehl, den Sie nicht verstehen:

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
'

Entfernen Sie 1N denn wir brauchen nur zwei Zeilen im 'Stack' und es reicht mit den zweiten N , und ändern Sie /^\n\n$/d; bis /^\n$/d; um alle zwei aufeinanderfolgenden Leerzeilen zu löschen.

Ein Test:

Inhalt von infile :

1


2
3

4



5

6


7

Führen Sie sed aus Befehl:

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

Das ergibt:

1
2
3

4

5

6
7

Mit awk wäre das einfacher :

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

Mit cat wäre das einfacher :

cat -s

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

Es werden nur zwei aufeinanderfolgende Leerzeilen in einer Datei gelöscht. Sie können diesen Ausdruck nur in der Datei verwenden, dann können nur Sie ihn vollständig verstehen. Wenn eine Leerzeile kommt, wird sie in geschweiften Klammern eingefügt.

Normalerweise liest sed eine Zeile. N fügt die zweite Zeile an den Musterbereich an. Wenn diese Zeile eine leere Zeile ist. die beiden Zeilen werden durch Zeilenumbruch getrennt.

/^\n$/ dieses Muster wird zu diesem Zeitpunkt nur mit d übereinstimmen wird funktionieren. Sonst d nicht arbeiten. d wird verwendet, um den gesamten Inhalt des Musterbereichs zu löschen und dann den nächsten Zyklus zu starten.


Linux
  1. So verwenden Sie den Linux-Befehl sed

  2. Lernen Sie, den Sed-Texteditor zu verwenden

  3. Wie verwendet man Sed, um eine mehrzeilige Zeichenfolge zu ersetzen?

  4. sed - Zeile nach X Zeilen nach Übereinstimmung einfügen

  5. So entfernen Sie die doppelten Anführungszeichen in einer CSV-Datei

Wie verwende ich Proxy in der Linux-Befehlszeile?

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux

BENUTZUNG DES SED-EDITORS

So löschen Sie mehrere Zeilen in Vim