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

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei

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 die sed 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.


Linux
  1. So verwenden Sie Awk und reguläre Ausdrücke zum Filtern von Text oder Zeichenfolgen in Dateien

  2. Wie verwendet man Sed, um eine mehrzeilige Zeichenfolge zu ersetzen?

  3. Suchen und Ersetzen in Shell-Skripten

  4. Finden Sie passenden Text und ersetzen Sie die nächste Zeile

  5. Suchen und ersetzen Sie Text in einer Datei zwischen einem Zeilenbereich mit sed

Linux-Hostdatei:Wie wird sie bearbeitet und verwendet?

So finden Sie eine Zeichenfolge in einer Datei unter Linux

So verwenden Sie den SED-Befehl zum Suchen und Ersetzen von Zeichenfolgen in Dateien

So suchen und ersetzen Sie Text, Wort oder Zeichenfolge in einer Datei

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

So finden und ersetzen Sie Text in Vim