Was ist SED in Linux und wie verwenden Sie es?
sed steht für tream ed itor und ist ein häufig verwendeter Befehl in Linux / Unix. Der Name kommt von einem Portmanteau dieser beiden Wörter. Es ist kein Texteditor, ändert jedoch den Text. Stattdessen empfängt sed Texteingaben als "Stream" und bearbeitet den Stream gemäß Ihren Anweisungen.
Im großen und ganzen verwenden Leute sed
als eine Befehlszeilenversion von Suchen und Ersetzen. Der Hauptbefehl im Programm wird verwendet, um eine Zeichenfolge durch eine andere zu ersetzen. Dies macht es nützlich für das Ausführen von Suchen und Ersetzen von Funktionen in einem Stapel von Dateien, aber es ist nicht so einfach zu verwenden wie etwas aus Editor oder Word. Sie werden feststellen, dass die Syntax ein wenig gewöhnungsbedürftig ist, aber sobald Sie das Problem lösen, werden Sie sehen, wie unglaublich leistungsfähig dieser kompakte Editor sein kann.
Sed für die Substitution verwenden
Um sed zu verwenden, müssen Sie ein Terminal-Fenster öffnen. Der Befehl wird mit sed
aufgerufen, aber die Eingabe allein macht nichts. Sie müssen einen der Befehle sowie einige Parameter angeben.
Der gebräuchlichste Parameter ist substitute oder s
. Ein einfacher sed
Ersetzungsbefehl sieht ungefähr so aus:
sed 's / Katze / Hund /'
Dieser Befehl ordnet sed an, eingehenden Text zu scannen und jede Instanz der Zeichenfolge "cat" durch "dog" zu ersetzen. Um dies zu demonstrieren, verwenden wir den Befehl echo
, um sed etwas zu geben, mit dem wir arbeiten können.
echokatapult | sed 's / Katze / Hund /'
Der Befehl sed besteht aus drei Hauptteilen. Zuerst gibt es sed
das das Programm startet. Dann gibt es das s
das den Substitutionsbefehl startet. Der Schrägstrich /
ist ein Trennzeichen. Die Zeichenfolge danach ist die Zeichenfolge, nach der sed sucht. Die Zeichenfolge nach dem zweiten Schrägstrich wird die Ersatzzeichen sein, die sed in den Stream schreibt. Der letzte Schrägstrich schließt den Befehl. Alles zusammen ist es 's/text-to-find/text-to-replace/'
.
Beachten Sie die einfachen Anführungszeichen in diesem Beispiel. Mit den einfachen Anführungszeichen können Sie Metazeichen in Ihrem Befehl verwenden. Während Zitate für die meisten unserer Beispiele nicht essentiell sind, sollten Sie die Angewohnheit entwickeln, Anführungszeichen für alle Befehle zu verwenden.
Was ist mit partiellen Strings? Der obige Befehl funktioniert bei jedem Auftreten der Zeichenfolge "Katze", auch wenn sie Teil eines anderen Wortes ist. Zum Beispiel wird "Katapult" zu "Dogapult", da "Katamaran" zu "Dogamaran" wird.
Echo Katapult | sed 's / Katze / Hund /'
Globaler Ersatz
In unserem ersten Beispiel haben Sie vielleicht bemerkt, dass nur die erste Instanz der übereinstimmenden Zeichenfolge ersetzt wurde. Wie viele GNU-Dienstprogramme ist sed linienbasiert. Daher wird nur bei der ersten Übereinstimmung innerhalb einer Zeile ausgeführt. Wenn Sie mehrere Übereinstimmungen für Ihre Kandidatenzeichenfolge in der Zeile haben, wird nur die erste Zeichenfolge geändert. Um sed bei jedem Auftreten der Zielzeichenfolge arbeiten zu lassen, verwenden Sie das g
Flag am Ende des Befehls:
sed 's / Katze / Hund / g'
Dies würde wie das folgende Beispiel funktionieren:
echo Katapult Katamaran | sed 's / Katze / Hund / g'
Ohne das globale Flag würde nur die erste Instanz von "cat" in jeder Zeile ersetzt werden.
Eingabe- und Ausgabedateien einstellen
Standardmäßig arbeitet sed mit der Standardeingabe. Das ist jedoch nicht sehr nützlich. Um sed für eine Datei auszuführen, geben Sie den Dateinamen am Ende des Befehls an:
sed 's / cat / hund / g' oldfile.txt> newfile.txt
Dies wird sed auf "oldfile.txt" ausführen und die Ausgabe des Befehls in "newfile.txt" speichern. Wenn "newfile.txt" nicht existiert, wird sie mit dem Befehl erstellt. Wenn Sie keine Ausgabedatei angeben, gibt sed den neuen Text der Datei in die Standardeingabe zurück.
Wenn Sie den Inhalt einer Datei überschreiben möchten, müssen Sie das Flag -i
verwenden. Diese Markierung macht die Änderungen "an Ort und Stelle".
sed -i '' 's / Katze / Hund' oldfile.txt
Dieser Befehl überschreibt sofort den Inhalt der Zieldatei, was etwas gefährlich ist. Um auf der sicheren Seite zu bleiben, können Sie ein Backup vor Ort erstellen.
Um eine Sicherungskopie der Datei zu erstellen, fügen Sie eine Erweiterung nach der -i
. Es muss keine funktionale Erweiterung sein: ".bu" oder ".bak" funktionieren einwandfrei. Dadurch wird eine Sicherungsdatei mit einer Erweiterung erstellt.
sed -i.bak 's / Katze / Hund' oldfile.txt
Dadurch wird "oldfile.txt.bak" erstellt, das die nicht editierten Textdaten aus der ursprünglichen Version von "oldfile.txt" enthält.
Übereinstimmende reguläre Ausdrücke
Die wahre Kraft von sed
kommt von übereinstimmenden regulären Ausdrücken. Auf diese Weise können Sie Muster für die Übereinstimmung und nicht für die Zeichenfolgen festlegen. Zum Beispiel könnten wir etwas wie die folgende Zeichenfolge verwenden, um einen Satz von einer oder mehreren Zahlen zu wiederholen:
Echo "123 abc" | sed 's / [0-9] [0-9] * / & & /'
Weiterlernen
sed ist ein extrem leistungsfähiges Dienstprogramm mit einer Leistungstiefe ähnlich einer Skriptsprache. Um mehr über die volle Leistungsfähigkeit von sed zu erfahren, sehen Sie sich Bruce Barnetts umfassenden sed-Ratgeber an.