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

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen

Als Teil unserer fortlaufenden UNIX-sed-Tutorial-Serie haben wir zuvor das Drucken, Löschen, Ersetzen, Schreiben von Dateien behandelt, Dateimanipulationsbefehle usw., mit der einzelnen Zeile im Musterbereich.

Lassen Sie uns in diesem Artikel überprüfen, wie die mehrzeilige Operation in Sed ausgeführt wird.

Erinnern Sie sich an die Sed-Arbeitsmethodik, die wir in unserem ersten Sed-Tutorial gelernt haben?. In diesem Artikel haben wir erklärt, dass Sed Zeile für Zeile liest, alle abschließenden neuen Zeilen entfernt, eine Zeile in einen Musterraumpuffer legt, gemäß den angegebenen Befehlen verarbeitet und den Musterraum ausgibt.

Falls Sie alle Zeilenumbrüche in einer Datei löschen möchten, können Sie die folgende Methode nicht verwenden. Weil der Zeilenumbruch bereits entfernt und im Musterbereich platziert wurde.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Für Situationen wie diese ist sed multiline angemessen. Sed bietet den Befehl „N“ für Multi-Line Operations.

Der N-Befehl liest eine nächste Zeile aus der Eingabe, fügt die nächste Zeile an den Musterbereich an. Die nächste Zeile wird durch ein Zeilenumbruchzeichen vom ursprünglichen Musterbereich getrennt.

Lassen Sie uns zuerst die Datei thegeekstuff.txt erstellen, die in allen unten genannten Beispielen verwendet wird.

$ cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Hinweis: In der obigen Eingabe befinden sich zwei aufeinanderfolgende Leerzeilen. ( 5. und 6. Zeile ).

Sed-Beispiel 1. Verbinden Sie zwei aufeinanderfolgende Linien

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

Im obigen Beispiel

  • Die geschweiften Klammern „{“ und „}“ werden verwendet, um die Befehle zu gruppieren. Die geschweiften Klammern und sed-Befehle müssen in separaten Zeilen stehen.
  • Sed liest die erste Zeile und platziert sie im Musterbereich, N-Befehl liest die nächste Zeile und fügt den Musterbereich hinzu, d. h. die erste Zeile wird durch Zeilenumbruch getrennt. Jetzt hat der Musterbereich firstline\nsecondline.
  • Nächste Substitution von \n zu space@space und es gibt den Inhalt des Musterbereichs als sed-Standardverhalten aus. Aufeinanderfolgende Zeilen werden also durch „@“
  • verbunden und getrennt

Sed Beispiel 2. Jede nicht-leere Zeile einer Datei nummerieren

Wie in unserem vorherigen Artikel erwähnt, ist =ein Befehl, um eine Zeilennummer einer Datei zu erhalten.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • Der erste sed-Befehl gibt die Zeilennummer und die ursprüngliche Zeile in der nächsten Zeile aus, wenn es kein Leerzeichen ist. (Führen Sie ihn aus und sehen Sie sich die Ausgabe des ersten sed-Befehls an).
  • Der nächste sed-Befehl hängt nur ein Zeilenpaar an.

Sed Beispiel 3. Löschen Sie zwei aufeinanderfolgende Leerzeilen aus der Eingabe

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Wenn die Zeile leer ist, wird die nächste Zeile gelesen und angehängt, /^\n$/ stellt dar, dass zwei Zeilen leer sind,\n wird durch den N-Befehl hinzugefügt. Löschen Sie dann einfach den Musterbereich und starten Sie den nächsten Zyklus mit dem Befehl „d“.

Sed Beispiel 4. Letzte 2 Zeilen einer Datei löschen

Bevor Sie sich dieses Beispiel ansehen, müssen Sie zwei interessante sed-Befehle kennen.

  1. P – druckt die erste Zeile eines Musterraums. (bis zum ersten \n).
  2. D – Lösche die erste Zeile aus dem Musterbereich. Die Steuerung geht dann an den Anfang des Skripts.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Liest die erste Zeile und platziert sie im Musterbereich.
  2. N-Befehl liest die nächste Zeile und hängt sie an den Musterbereich an, getrennt durch Zeilenumbruch. (Jetzt erste Zeile\nzweite Zeile)
  3. Wenn die letzte Zeile ($) nicht erreicht wird, drucken Sie die erste Zeile und löschen Sie die erste Zeile allein aus dem Musterbereich. Dann beginnt der Zyklus von neuem.
  4. So verbindet es die 2.\n3. Linie, die 3.\n4. Linie und geht weiter.
  5. Zuletzt, wenn es die 9.\n10. Zeile in einem Musterraum hat, erreicht es $, also löscht es einfach den Musterraum. ($!P und $!D werden nicht gedruckt und gelöscht, wenn es $ ist).

Sed Beispiel 5. Letzte 2 Zeilen einer Datei drucken

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Das Obige verbindet und löscht jede Zeile, bis die letzten beiden Zeilen im Musterbereich vorhanden sind. Wenn es $ erreicht, wird der Musterbereich gedruckt, der nur die letzten zwei Zeilen haben wird.

Sed Beispiel 6. Doppelte, aufeinanderfolgende Zeilen aus einer Datei löschen

Der folgende Befehl überprüft jede Zeile, die mit der nächsten Zeile verbunden ist. Überprüfen Sie, ob beide gleich sind, dann ist es nicht der Druckmusterbereich (! P), löschen Sie einfach die erste Zeile aus dem Musterbereich. Es bleibt also nur eine Zeile im Musterbereich.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Linux/UNIX Awk Command Tutorial mit Beispielen

  2. 17 Nützlicher Tar-Befehl mit praktischen Beispielen in Linux

  3. Diff-Befehl in Linux mit Beispielen

  4. Awk-Tutorial:Awk-Variablen verstehen mit 3 praktischen Beispielen

  5. Bash Shell Exit Status Tutorial mit praktischen Beispielen

Unix-Sed-Tutorial:Fortgeschrittene Sed-Ersetzungsbeispiele

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

Unix-Sed-Tutorial:6 Beispiele für Sed-Verzweigungsoperationen

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Das ultimative Tar Command Tutorial mit 10 praktischen Beispielen

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen