Einführung
Sed steht für S träum ED itor. Es ist ein Linux-Befehl, der zum Suchen, Finden und Ersetzen oder Einfügen und Löschen von Wörtern und Zeilen in einer Textdatei verwendet wird.
Der häufigste Anwendungsfall des Sed-Befehls ist das Suchen und Ersetzen von Zeichenfolgen in Dateien. Wenn Sie den Sed-Befehl verwenden, können Sie Dateien bearbeiten, ohne sie zu öffnen.
Dieser Artikel erklärt detailliert die Verwendung des Sed-Befehls zum Suchen und Ersetzen von Zeichenfolgen in Dateien.
Alle Beispiele in diesem Tutorial wurden auf Ubuntu 20.04 ausgeführt.
Suchen und Ersetzen
Standardmäßig ist Sed in den meisten Linux-Distributionen installiert. Sie können die Installation von Sed auf Ihrem Linux-System überprüfen, indem Sie Folgendes ausführen:
$ sed --v
Die Ausgabe sieht in etwa so aus:
Die grundlegende Syntax für die Verwendung des Sed-Befehls zum Suchen und Ersetzen von Text lautet:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Wobei:
-i:Diese Option veranlasst den Sed-Befehl, Dateien an Ort und Stelle zu bearbeiten, anstatt die Ausgabe auf die Standardausgabe zu schreiben.
s:Es steht für Ersatz.
/ /:Trennzeichen.
g:Es ist ein globales Ersatz-Flag.
DATEI:Die Datei, die Sie mit dem Sed-Befehl bearbeiten möchten.
Es wird dringend empfohlen, Suchmuster, Ersetzungsmuster und andere Argumente in Anführungszeichen zu setzen.
Hier ist zum Beispiel eine Textdatei, die zur Demonstration verwendet wurde:
567 Test test test
test /bin/zsh linuxways.net testbar 789
Führen Sie den folgenden Befehl aus, um alle „test“-Wörter durch „linux“-Wörter zu ersetzen:
$ sed -i 's/test/linux/g' test.txt
Ausgabe:
Wenn Sie das g-Flag nicht verwenden, wird nur das erste Vorkommen des Suchmusters in jeder Zeile ersetzt:
$ sed -i 's/test/linux/' test.txt
Ausgabe:
Wie Sie sehen können, wird im vorherigen Beispiel der Teilstring test auch innerhalb des testbar-Strings platziert. Wenn Sie keinen Teilstring im Suchmuster ersetzen möchten, setzen wir das Suchmuster zwischen zwei Wortgrenzen \b:
$ sed -i 's/\btest\b/linux/g' test.txt
Ausgabe:
Um das Suchmuster unabhängig von der Groß-/Kleinschreibung zu machen, verwenden wir das I-Flag:
$ sed -i 's/test/linux/gI' test.txt
Ausgabe:
In der Linux-Welt werden wir auf viele Anwendungsfälle stoßen, die Trennzeichen in Textdateien enthalten. Wir müssen den Backslash \ verwenden, um die Trennzeichen auszubrechen. Um beispielsweise /bin/zsh durch /usr/bin/bash zu ersetzen, führen Sie Folgendes aus:
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Ausgabe:
Rekursives Suchen und Ersetzen
In vielen Fällen möchten Sie Verzeichnisse rekursiv nach Dateien durchsuchen, die eine bestimmte Zeichenfolge enthalten, und diese Zeichenfolge in allen Dateien ersetzen.
Beispielsweise sucht der folgende Befehl die Zeichenfolge „Weg“ und ersetzt sie durch „Straße“ in allen Dateien im aktuellen Verzeichnis.
$ find . -type f -exec sed -i 's/way/road/g' {} +
Wenn die Dateinamen Leerzeichen enthalten, verwenden wir die Option -print0:
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Um eine Zeichenfolge nur in Dateien mit einer bestimmten Erweiterung zu suchen und zu ersetzen, führen Sie Folgendes aus:
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'
Schlussfolgerung
Sie haben einige gängige Beispiele für die Verwendung des Sed-Befehls durchgesehen. Das Suchen und Ersetzen einer Textzeichenfolge in einer Datei mit dem Sed-Befehl ist nicht so kompliziert, wie Sie es sich vorstellen.
Wenn Sie irgendwelche Bedenken haben, lassen Sie es mich bitte im Kommentarbereich wissen.