Einführung in den sed-Editor
Der Begriff sed steht für Stream-Editor . Sed kann seine Eingaben von Standard In übernehmen, die angeforderten Änderungen auf den Stream anwenden und die Ergebnisse automatisch auf Standard Out übertragen. Die sed-Syntax ermöglicht die Angabe einer Eingabedatei auf der Befehlszeile.
Sie müssen nicht mit dem sed-Editor interagieren, während er läuft; daher wurde es auch als Batch-Editor bezeichnet. Dies steht im Gegensatz zu Editoren wie vi und ed, die interaktiv sind. Da sed keine Interaktion erfordert, können Sie sed-Befehle in ein Skript einfügen. Sie können die Skriptdatei aufrufen und für die Datendatei ausführen, um sich wiederholende Bearbeitungsvorgänge durchzuführen.
Befehlsformat
Das Folgende zeigt die Syntax für den Befehl sed:
# sed [options] 'action [args]' files [ > outfile]
Der sed-Editor ist in der Lage, Textmuster zu ersetzen und Textmuster zu löschen, indem er die Syntax regulärer Ausdrücke verwendet. Dies sind dieselben regulären Ausdruckszeichen, die von grep verwendet werden.
Der Befehl sed bietet Funktionen, die eine Erweiterung der interaktiven Textbearbeitung darstellen. Wenn Sie Textstrings in einer großen Anzahl von Dateien suchen und ersetzen müssen, ist sed am nützlichsten.
Bearbeitungsbefehle
Der sed-Editor verwendet Bearbeitungsbefehle (siehe Tabelle), die denen ähneln, die Sie für vi und ed verwenden würden.
Befehl | Funktion |
---|---|
d | Löscht Zeile(n) |
p | Zeile(n) drucken |
r | Liest eine Datei |
s | Ersetzt eine Zeichenfolge durch eine andere |
w | Schreibt in eine Datei |
Der Befehl sed hat zwei Optionen:
Option | Funktion |
---|---|
-n | Unterdrückt die Standardausgabe |
-f | Liest sed-Befehle aus einer Skriptdatei |
In den Beispielen verwendete Beispieldaten
Die folgenden Beispiele führen sed-Befehle für die Datei „data.txt“ aus. Der Inhalt der Datei data.txt ist wie folgt.
# cat data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Mit sed Text drucken
Beispiel 1:Zeilenbereich drucken
Das folgende Beispiel zeigt die Verwendung des Befehls p (print), der eine Reihe von Zeilen auf stdout ausgibt. Der Bereich wird durch eine Startadresse gefolgt von einem Komma und dann der Endadresse angegeben. Die Standardausgabe von sed ist jede Zeile, die es liest. Verwenden Sie die Option -n, um die Standardausgabe zu unterdrücken.
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3
Beispiel 2:Zeilen drucken, die ein bestimmtes Muster enthalten
Der folgende Befehl druckt alle Zeilen mit dem Muster West darin. Verwenden Sie den Schrägstrich (/), um den regulären Ausdruck abzugrenzen.
# sed -n '/west/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
Beispiel 3:Druckzeile mit mehreren Mustern
Der folgende Befehl druckt die erste Zeile mit dem Muster West bis einschließlich der nächsten Zeile mit dem Muster Süd.
# sed -n '/west/,/southern/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45
Beispiel 4 :Zeile mit Muster und alle Zeilen danach drucken
Der folgende Befehl gibt die erste Zeile mit dem Muster Chris bis zur letzten Zeile der Datei aus.
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Beispiel 5:Funktionalität ähnlich wie bei grep
Das Muster kann die von grep verwendeten regulären Ausdruckszeichen enthalten. Das folgende Beispiel gibt alle Zeilen aus, die mit einem s beginnen und mit einer 5 enden.
# sed -n '/^s.*5$/p' data.txt southern SO May Chin 45
Sed zum Ersetzen von Text verwenden
Befehl | Beispiel | Aktion bearbeiten |
---|---|---|
s | sed s/x/y/option | Suchen und ersetzen. Das Suchmuster x wird durch das Muster y ersetzt. Das Such- und das Ersetzungsmuster sind in den meisten Fällen reguläre Ausdrücke, und das Such- und Ersetzungsverhalten kann durch verschiedene Optionen beeinflusst werden. |
y | sed y/abc/xyz/ | Ersetze jedes Zeichen aus dem Satz von Quellzeichen durch das Zeichen, das dieselbe Position in dem Satz von Zielzeichen hat. |
Beispiel 1:Suche und ersetze ein bestimmtes Muster
Die sed s Der Befehl ermöglicht eine Such- und Ersetzungsoperation für den Text. Der Befehl verwendet eine Mustersuche und eine wörtliche Zeichenfolgenersetzung. Die Zeichen der Ersetzungszeichenfolge werden wörtlich genommen, ohne Metazeichenerweiterung.
# sed 's/3/X/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Der Befehl sed prüft jede Zeile der Datei und ersetzt das erste Vorkommen der alten Zeichenfolge durch die neue Zeichenfolge. Nachfolgende Vorkommen der alten Zeichenfolge innerhalb derselben Zeile bleiben unverändert.
Beispiel 2:Globales Suchen und Ersetzen eines bestimmten Musters
Das folgende Beispiel zeigt das g (global) Befehl mit den s (Suchen und Ersetzen) Befehl und ersetzt alle Vorkommen der alten Zeichenfolge durch die neue Zeichenfolge.
# sed 's/3/X/g' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Beispiel 3 :Suchen und Ersetzen mit Suchmuster, das in der Ersetzung enthalten ist
Gelegentlich wird bei einer Suche und Ersetzung die alte Zeichenfolge Teil der neuen Ersetzungszeichenfolge, was Sie erreichen können, indem Sie ein &(kaufmännisches Und) in die Ersetzungszeichenfolge einfügen. Die Position des &bestimmt die Position der alten Zeichenfolge in der Ersatzzeichenfolge.
Das Ziel der folgenden Beispiele ist es, einen Befehl zu schreiben, der nach allen Zeilen sucht, die im letzten Feld mit einer einzelnen Ziffer enden, und die einzelne Ziffer durch die einstellige Zahl plus die Zeichenfolge Single Digit ersetzt.
Um die Zeilen mit einstelligen Zahlen im letzten Feld richtig zu identifizieren, betrachten Sie den folgenden sed-Befehl. Tabulatoren trennen die Felder mit jeder Zeile.
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
Der folgende Befehl sucht nach allen Zeilen, die im letzten Feld mit einer einzelnen Ziffer enden, und ersetzt die einzelne Ziffer durch die einstellige Zahl plus die Zeichenfolge Single Digit.
# sed 's/ [0-9]$/& Single Digit/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 Single Digit eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Mit sed Text löschen
Beispiel 1:Zeilenbereich löschen
Der folgende Befehl löscht die Zeilen 4 bis 8 aus der Ausgabe.
# sed '4,8d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
Beispiel 2:Zeilen löschen, die ein bestimmtes Muster enthalten
Der folgende Befehl löscht jede Zeile, die das Muster West enthält.
# sed '/west/d' data.txt southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Beispiel 3
Der folgende Befehl löscht jede Zeile, die mit dem Muster west.
beginnt# sed '/^west/d' data.txt northwest NW Joel Craig 10 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Beispiel 4
Der folgende Befehl löscht den Zeilenbereich beginnend mit der ersten Zeile, die das Muster south enthält, bis zur nächsten Zeile der Datei, die north enthält.
# sed '/south/,/north/d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
Zusätzliche sed-Funktionalität – Bearbeitungsbefehle
Zusätzliche sed-Editor-Befehle sind in der folgenden Tabelle aufgeführt.
Befehl | Funktion |
---|---|
ein | Hängt Text an |
c | Ändert Text in der aktuellen Zeile durch neuen Text |
ich | Fügt Text über der aktuellen Zeile ein |
Platzieren mehrerer Bearbeitungen in einem einzigen sed-Befehl
Es gibt Zeiten, in denen Sie mehrere Bearbeitungen an der Datei vornehmen möchten. Anstatt mehrere sed-Befehle zu verwenden, können Sie die Option -e verwenden, um die Änderungen in derselben Befehlszeile zu platzieren. Die Bearbeitungen werden in der von Ihnen angegebenen Reihenfolge durchgeführt.
Beispiel 1
Löschen Sie Zeilen sorgfältig. Sie können eine Textzeile bearbeiten und anschließend diese Textzeile aus der Ausgabe entfernen. Dies geschieht im folgenden Beispiel mit Zeile 1 der Eingabedatei.
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44