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

Linux-Befehl sed:Verwendung des Stream-Editors

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

Linux
  1. So verwenden Sie den Linux-Befehl sed

  2. So verwenden Sie den Linux-Grep-Befehl

  3. So verwenden Sie den Verlaufsbefehl unter Linux

  4. So verwenden Sie den id-Befehl unter Linux

  5. So verwenden Sie den Befehl „screen“ unter Linux

So verwenden Sie Nano, den Linux-Befehlszeilen-Texteditor

So verwenden Sie den fd-Befehl auf einem Linux-System

Wie verwende ich den wget-Befehl unter Linux?

Wie verwende ich den xargs-Befehl unter Linux?

So verwenden Sie den RPM-Befehl unter Linux

So verwenden Sie den which-Befehl in Linux