Das sed steht für Stream-Editor. Es liest die angegebene Datei und modifiziert die Eingabe gemäß einer Liste von sed-Befehlen.
Standardmäßig wird die Eingabe auf den Bildschirm geschrieben, aber Sie können die Aktualisierung der Datei erzwingen.
Der Linux-Befehl Sed (Stream EDitor) wird zum Suchen, Finden und Ersetzen oder Einfügen und Löschen von Wörtern und Zeilen in einer Textdatei verwendet.
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.
Hier bei LinuxAPT helfen wir unseren Kunden im Rahmen unserer Server Management Services regelmäßig bei der Durchführung von Abfragen im Zusammenhang mit Linux-Servern.
In diesem Zusammenhang werden wir untersuchen, wie der Sed-Befehl verwendet wird, um Zeichenfolgen in Dateien im Ubuntu 20.04-System zu finden und zu ersetzen.
Suchen und Ersetzen auf Ubuntu
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 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
Wo:
-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 linuxapt.com 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
Wenn Sie das Flag g nicht verwenden, wird nur das erste Vorkommen des Suchmusters in jeder Zeile ersetzt:
$ sed -i 's/test/linux/' test.txt
Um das Suchmuster unabhängig von der Groß-/Kleinschreibung zu machen, verwenden wir das I-Flag:
$ sed -i 's/test/linux/gI' test.txt
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
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 „apt“ und ersetzt sie durch „road“ in allen Dateien im aktuellen Verzeichnis.
$ find . -type f -exec sed -i 's/apt/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/apt/road/g'