Einführung
SED ist ein Textstream-Editor, der auf Unix-Systemen verwendet wird, um Dateien schnell und effizient zu bearbeiten. Das Tool durchsucht, ersetzt, fügt hinzu und löscht Zeilen in einer Textdatei, ohne die Datei in einem Texteditor zu öffnen.
Erfahren Sie, wie Sie sed
verwenden Befehl und seine Optionen durch leicht verständliche Beispiele.
Sed-Syntax für Linux
Die Hauptsyntax für die Verwendung von Linux sed
Befehl ist:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
sed-Linux-Optionen
Sie können sed
ausführen mit den folgenden Befehlszeilenoptionen:
-b , --binary | Öffnen Sie Eingabedateien im Binärmodus, um zu berücksichtigen, dass Zeilen mit einem Zeilenvorschub enden. |
--debug | Wechseln Sie in den Debug-Modus, um Eingaben in kanonischer Form zu drucken und die Programmausführung zu kommentieren. |
--follow-symlinks | Bearbeiten Sie das endgültige Ziel, wenn die angegebene Datei ein symbolischer Link ist. Es funktioniert nur in Kombination mit dem -i Möglichkeit. |
--help | Nutzungsinformationen anzeigen. |
--i , --in-place [=SUFFIX] | Führen Sie Änderungen direkt durch, indem Sie die Originaldatei überschreiben. |
--posix | Deaktivieren Sie alle Erweiterungen für POSIX sed um das Schreiben portabler Skripte zu vereinfachen. |
--version | Anzeige der Version von sed läuft auf dem System. |
-E , -r , --regexp-extended | Verwenden Sie erweiterte reguläre Ausdrücke. |
-e <em>script</em> , --expression=<em>script</em> | Fügen Sie ein bestimmtes Skript hinzu, das mit den Befehlen ausgeführt werden soll. |
-f <em>script-file</em> | Fügen Sie den Inhalt einer bestimmten Skriptdatei hinzu, die mit den Befehlen ausgeführt werden soll. |
-l <em>N</em> , --line-length=<em>N</em> | Definieren Sie die gewünschte Zeilenumbruchlänge für l Befehl (Standardwert ist 70). |
-n , --quiet , --silent | Ausgabedruck deaktivieren. |
-s , --separate | Angegebene Dateien separat anzeigen, nicht als einzelnen kontinuierlichen langen Stream. |
--sandbox | Deaktivieren Sie die Ausführung externer Programme und arbeiten Sie nur mit Eingabedateien auf der Befehlszeile. |
-u , --unbuffered | Eingangs- und Ausgangspuffer minimieren. |
-z , --null-data , --zero-terminated | Betrachten Sie die Eingabe als eine Reihe von Zeilen, von denen jede mit einem Nullbyte endet. |
Linux-Sed-Beispiele
Unten zeigen wir zehn häufig verwendete sed
Befehle, Beispiele und Syntax.
Für dieses Tutorial haben wir eine Beispieldatei mit dem Namen foxinbox.tx erstellt t mit folgendem Inhalt:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Beachten Sie, dass sed
wirkt sich nicht auf die Quelldatei aus, es sei denn, Sie werden angewiesen. Stattdessen zeigt der Befehl die durch den gegebenen Befehl vorgenommenen Änderungen in seiner Ausgabe an.
Um die Originaldatei zu überschreiben, verwenden Sie -i
Option zum Speichern der Änderungen. Eine solche Vorgehensweise wird jedoch nicht empfohlen, bevor Sie die Befehlsausgabe testen.
Alternativ können Sie die Bearbeitungen in einer anderen (oder neuen) Datei speichern. Leiten Sie die Ausgabe um, indem Sie > newfilename.txt
hinzufügen am Ende des Befehls.
String mit dem sed-Befehl ersetzen
Die Linux-sed
Der Befehl wird am häufigsten zum Ersetzen von Text verwendet. Es sucht nach dem angegebenen Muster in einer Datei und ersetzt es durch die gewünschte Zeichenfolge.
So ersetzen Sie Text mit sed
verwenden Sie den Ersatzbefehl s
und Trennzeichen (in den meisten Fällen Schrägstriche - /
) zum Trennen von Textfeldern.
Daher lautet die Syntax zum Ersetzen von Text:
sed 's/old_string/new_string/' filename.txt
Ersetzen Sie old_string
durch den zu ersetzenden Text und new_string
mit dem Text, in den Sie ihn ändern möchten.
Zum Beispiel, um Instanzen von box
zu ersetzen mit dem Wort bin
, ausführen:
sed 's/box/bin/' foxinbox.txt
Die Ausgabe zeigt den Text mit den ersetzten Wörtern, wie im Bild unten.
Alle Vorkommen von Strings mit dem sed-Befehl ersetzen
Standardmäßig sed
ersetzt nur das erste Vorkommen der angegebenen Zeichenfolge in jeder Zeile. Es sucht nach dem ersten Vorkommen des angegebenen Wortes in einer Zeile, ersetzt es und fährt mit der nächsten Zeile fort.
Mit mehreren Vorkommen des Wortes box
in derselben Zeile ersetzt der Befehl nur den ersten.
Wenn Sie mehrere Instanzen desselben Wortes in einer einzelnen Zeile haben, fügen Sie g
hinzu Flag auf den Befehl, um sie alle zu ändern.
Der Befehl zum Ersetzen jedes Vorkommens einer gegebenen Zeichenkette innerhalb eines Textes lautet:
sed 's/old_string/new_string/g' filename.txt
Um das Wort box
zu ersetzen mit dem Wort bin
in der Datei foxinbox.txt Geben Sie jedes Mal Folgendes ein:
sed 's/box/bin/g' foxinbox.txt
Die obige Ausgabe zeigt, dass der Befehl alle Instanzen des Wortes box
ersetzt hat .
Bestimmtes Vorkommen in einer Zeile mit dem sed-Befehl ersetzen
Der sed
Mit dem Befehl können Sie auswählen, welches Vorkommen einer bestimmten Zeichenfolge Sie in jeder Zeile ersetzen möchten. Fügen Sie dazu ein Nummern-Flag wie 1
hinzu , 2
usw.:
sed 's/old_string/new_string/#' filename.txt
Zum Beispiel, um das zweite Vorkommen des Wortes box
zu ersetzen in jeder Textzeile mit dem Wort bin
, verwenden Sie diesen Befehl:
sed 's/box/bin/2' foxinbox.txt
Der Befehl hat drei Instanzen des Wortes übersprungen, weil sie an erster Stelle standen, und nur das eine am Ende ersetzt.
Nur Zeilen mit Ersatztext drucken
Standardmäßig ist die sed
Der Befehl gibt den gesamten Dateiinhalt zusammen mit dem Ersatztext in seiner Ausgabe aus. Wenn Sie viel Text haben und sich auf die Zeilen mit den angewendeten Änderungen konzentrieren möchten, fügen Sie dem Befehl die erforderlichen Attribute hinzu.
Um nur die Zeilen auszugeben, die unter den gegebenen Bedingungen ersetzt wurden, verwenden Sie die Syntax:
sed -n 's/old_string/new_string/p' filename.txt
Das -n
Option deaktiviert das automatische Drucken, während der Ersatzbefehl p
weist sed
an um Zeilen zu drucken, in denen eine Substitution auftritt.
Sie können das p
hinzufügen Befehl zu anderen Ersatzbefehlen, wie im folgenden Beispiel:
sed -n 's/box/bin/2p' foxinbox.txt
Der Befehl ersetzt die zweite Instanz des Wortes box
in einer Zeile und druckt die Zeile, in der die Änderung stattgefunden hat. In der Abbildung unten sehen Sie nur eine Zeile mit der angewendeten Ersetzung.
String mit dem sed-Befehl ersetzen und Groß-/Kleinschreibung ignorieren
Standardmäßig ist die sed
Beim Befehl wird zwischen Groß- und Kleinschreibung unterschieden. Der folgende Inhalt enthält beispielsweise das Wort fox
mit großen und kleinen Anfangsbuchstaben:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Um alle Instanzen des Wortes Fuchs zu ersetzen , führen Sie nicht den üblichen Befehl aus:
sed 's/fox/cow/' foxinbox.txt
Das Ergebnis des Befehls ändert nur das Vorkommen des Wortes fox
wobei es sich um Kleinbuchstaben handelt:
Um die Groß-/Kleinschreibung beim Ersetzen von Text zu ignorieren, fügen Sie das i
hinzu Unterbefehl am Ende des Befehls:
sed 's/old_string/new_string/i' filename.txt
Daher der Befehl zum Ändern der Groß- und Kleinschreibung des Wortes fox im Text oben steht:
sed 's/fox/cow/i' foxinbox.txt
Die Ausgabe zeigt, dass der Befehl alle drei Instanzen der angegebenen Zeichenfolge geändert hat.
Ersetzen Sie die Zeichenfolge in einer bestimmten Zeile mit dem Befehl sed
Der sed
Mit dem Befehl können Sie eine Zeichenfolge in einer bestimmten Zeile ersetzen, indem Sie die Zeilennummer als Präfix zu den s
hinzufügen Unterbefehl:
sed '# s/old_string/new_string/' filename.txt
Testen Sie diese Funktion anhand der Beispieldatei foxinbox.txt ersetzen Sie das Wort socks
mit sandals
erst in der vierten Zeile (4
) des Textes mit dem Befehl:
sed '4 s/socks/sandals/' foxinbox.txt
Die Ausgabe zeigt, dass das erste Vorkommen des Wortes socks
in der zweiten Zeile bleibt gleich, während das gleiche Wort durch sandals
ersetzt wurde in der vierten Zeile.
Zeichenfolge nur in bestimmten Zeilenbereichen mit dem Befehl sed ersetzen
Um mehrere Instanzen einer Zeichenfolge innerhalb eines Zeilenbereichs, aber nicht den gesamten Text zu ersetzen, geben Sie den Bereich an, in dem Sie sed
möchten ersetzen. Die Syntax lautet:
sed '#,# s/old_string/new_string/' filename.txt
Ersetzen Sie das erste #
mit der ersten Zeilennummer und dem zweiten #
mit der letzten Zeilennummer, die Sie einschließen möchten.
Zum Beispiel, um die letzten beiden Instanzen des Wortes socks zu ersetzen in der Datei foxinbox.txt (befindet sich in der vierten und sechsten Zeile) mit dem Wort sandals
, würden Sie Folgendes ausführen:
sed '4,6 s/socks/sandals/' foxinbox.txt
Löschen Sie eine bestimmte Zeile mit dem Befehl sed
Um eine Zeile aus einer Datei mit dem sed
zu löschen verwenden Sie den Befehl d
Unterbefehl und die Syntax:
sed '#d' filename.txt
Geben Sie anstelle der Raute die Zeilennummer an, die Sie entfernen möchten (#
) Symbol und führen Sie den Befehl aus.
Zum Beispiel, um die zweite Zeile aus der foxinbox.txt zu entfernen Datei, geben Sie ein:
sed '2d' foxinbox.txt
Löschen Sie Zeilen innerhalb eines bestimmten Zeilenbereichs mit dem Befehl sed
Um mehrere Zeilen innerhalb eines Zeilenbereichs zu löschen, verwenden Sie den sed
Befehl, folgen Sie der Syntax:
sed '#,#d' filename.txt
Ersetzen Sie die Hash-Symbole durch den Anfang und das Ende des Zeilenbereichs. Zum Beispiel:
sed '2,4d' foxinbox.txt
Der obige Befehl löscht die Zeilen 2, 3 und 4 aus der Datei.
Mit dem sed-Befehl von der spezifischen bis zur letzten Zeile löschen
Um Zeilen von einer bestimmten Zeilennummer bis zur letzten Zeile zu löschen, verwenden Sie den Befehl:
sed '#,$d' filename.txt
Das heißt, alles von Zeile 3 bis zum Ende von foxinbox.txt zu entfernen , führen Sie diesen Befehl aus:
sed '3,$d' foxinbox.txt