Einführung
Der sed (s behandeln ed itor) ist ein zeilenorientiertes Tool zum Analysieren und Transformieren von Text. Der sed
command verwendet eine einfache Programmiersprache und reguläre Ausdrücke, um Textströme und Dateien zu verarbeiten. Die am häufigsten verwendete Funktion von sed
Befehl ist String-Ersetzung.
Diese Anleitung zeigt, wie Sie sed
verwenden um Zeichenfolgen anhand von Beispielen zu finden und zu ersetzen.
Voraussetzungen
- Zugriff auf die Befehlszeile/das Terminal.
- Eine Textdatei (diese Anleitung enthält eine example.txt Datei).
- Grundlegende Terminalbefehle (holen Sie sich unseren kostenlosen Spickzettel).
sed Suchen und Ersetzen-Syntax
Die Syntax zum Suchen und Ersetzen von Text mit sed
Befehl ist:
sed -i 's/<search regex>/<replacement>/g' <input file>
Der Befehl besteht aus Folgendem:
-i
sagt diesed
Befehl, um die Ergebnisse in eine Datei statt in die Standardausgabe zu schreiben.s
gibt den Ersatzbefehl an./
ist das häufigste Trennzeichen. Der Befehl akzeptiert auch andere Zeichen als Trennzeichen, was nützlich ist, wenn der String Schrägstriche enthält.<search regex>
ist der Suchparameter für Zeichenfolgen oder reguläre Ausdrücke.<replacement>
ist der Ersetzungstext.g
ist das globale Ersetzungs-Flag, das alle Vorkommen eines Strings ersetzt und nicht nur das erste.<input file>
ist die Datei, in der gesucht und ersetzt wird.
Die einfachen Anführungszeichen helfen dabei, die Erweiterung von Metazeichen in der Shell zu vermeiden.
Die BDS-Version von sed
(einschließlich macOS) unterstützt keine Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung oder Dateiersetzung. Der Befehl zur Dateiersetzung sieht folgendermaßen aus:
sed 's/<search regex>/<replacement>/g' <input file> > <output file>
Installieren Sie alternativ die GNU-Version von sed
auf macOS mit Homebrew:
brew install gnu-sed
Führen Sie GNU sed
aus Befehl wie folgt:
gsed -i 's/<search regex>/<replacement>/g' <input file>
Ersetzen Sie sed
Befehl mit gsed
um den Beispielen unten zu folgen.
sed-Ersetzungsbeispiele
Die Beispiele aus diesem Handbuch verwenden eine Beispieldatei, um Zeichenfolgen zu ersetzen.
1. Erstellen Sie eine Beispieltextdatei:
nano example.txt
2. Fügen Sie den folgenden Inhalt hinzu:
foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz
Verwenden Sie die Datei als Eingabe, um die folgenden Beispiele zu testen.
Hinweis :Für eine volle sed
Befehls-Lernprogramm für Linux finden Sie in unserem Linux-Leitfaden zum Befehl sed.
Erste passende Zeichenfolge ersetzen
1. Um die erste gefundene Instanz des Wortes bar zu ersetzen mit linux Führen Sie in jeder Zeile einer Datei Folgendes aus:
sed -i 's/bar/linux/' example.txt
2. Die -i
-Tag fügt die Änderungen in die example.txt ein Datei. Überprüfen Sie den Dateiinhalt mit dem cat-Befehl:
cat example.txt
Der Befehl ersetzt die erste Instanz von bar mit linux in jeder Zeile, einschließlich Teilzeichenfolgen. Die Übereinstimmung ist exakt und ignoriert Großschreibungsvariationen.
Global ersetzen
Um jede Zeichenfolgenübereinstimmung in einer Datei zu ersetzen, fügen Sie g
hinzu Flagge zum Skript. Zum Beispiel:
sed -i 's/bar/linux/g' example.txt
Der Befehl ersetzt global jede Instanz von bar mit linux in der Datei.
Alle Fälle abgleichen und ersetzen
Verwenden Sie I
, um alle Instanzen eines Wortes zu suchen und zu ersetzen und die Groß-/Kleinschreibung zu ignorieren Parameter:
sed -i 's/bar/linux/gI' example.txt
Der Befehl ersetzt alle Instanzen des Wortes bar im Text, Groß- und Kleinschreibung ignorieren.
Teilstrings ignorieren
Fügen Sie Wortgrenzen hinzu (\b
) zu sed
Befehl zum Ignorieren von Teilstrings beim Ersetzen von Strings in einer Datei. Zum Beispiel:
sed -i 's/\bbar\b/linux/gI' example.txt
Alternativ können Sie das Trennzeichen ändern, um den Befehl besser lesbar zu machen:
sed -i 's:\bbar\b:linux:gI' example.txt
Der Befehl ignoriert Teilstrings und passt nur auf das ganze Wort.
Strings suchen und durch Schrägstriche ersetzen
Maskieren Sie den Schrägstrich, um eine Zeichenfolge zu suchen und durch Schrägstriche zu ersetzen. Zum Beispiel, um /foo/bar/baz zu ersetzen mit /home/kb verwenden Sie die folgende Syntax:
sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt
Alternativ können Sie das Trennzeichen ändern, um Escape-Zeichen zu vermeiden:
sed -i 's:/foo/bar/baz:/home/kb:g' example.txt
Verwenden Sie diese Syntax, um Pfade und andere Zeichenfolgen durch Schrägstriche zu ersetzen.
Suchen und durch reguläre Ausdrücke ersetzen
Das Suchmuster für sed
Der Befehl akzeptiert reguläre Ausdrücke, ähnlich wie grep regex. Zum Beispiel, um alle Großbuchstaben abzugleichen und sie durch 5 zu ersetzen , verwenden Sie:
sed -i 's/[A-Z]/5/g' example.txt
Das Regex-Muster hilft dabei, alle Großbuchstaben zu finden und ersetzt sie durch die Zahl in der Datei.
Referenz gefundener String
Verwenden Sie das kaufmännische Und-Zeichen (&
), um auf die gefundene Zeichenfolge zu verweisen. Um beispielsweise einen Schrägstrich hinzuzufügen (/ ) vor jeder Instanz von foo Verwenden Sie in einer Datei:
sed -i 's/foo/\/&/gI'example.txt
Anstatt den Suchparameter erneut einzugeben, wird der &
sign verweist auf den gefundenen String.
Erstellen Sie eine Sicherung
Um eine Sicherungsdatei zu erstellen, bevor die vorhandene überschrieben wird, fügen Sie .bak
hinzu Parameter zum -i
-Tag.
sed -i.bak 's/foo/FOO/g' example.txt
Der Befehl erstellt ein Backup (example.txt.bak
), bevor das Original überschrieben wird. Verwenden Sie diese Methode, um eine Kopie im Originalformat zu behalten und ein Überschreiben zu vermeiden.
Rekursives Suchen und Ersetzen
Verwenden Sie den Befehl find, um nach Dateien zu suchen, und kombinieren Sie ihn mit sed
um Strings in Dateien rekursiv zu ersetzen. Zum Beispiel:
find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +
Der Befehl findet alle Dateien, die mit example beginnen und führt den sed
aus Befehl auf die Dateien. Der ausgeführte Befehl ersetzt alle Buchstaben durch 5 , Groß- und Kleinschreibung ignorieren.
Fazit
Nachdem Sie die Beispiele in diesem Leitfaden durchgearbeitet haben, wissen Sie, wie Sie sed
verwenden um Zeichenketten in Dateien zu ersetzen. Der sed
command ist ein leistungsstarkes Dienstprogramm zur Textbearbeitung mit vielen erweiterten Funktionen.
Sehen Sie sich als Nächstes den Befehl awk oder gawk an, um mehr über andere Tools zur Textbearbeitung zu erfahren.