Sed regex ersetzen

Sed regex ersetzen

In Unix/Linux ist SED ein spezieller Befehl zum Bearbeiten von Streams. Hier kommt der Name des Befehls (Stream Editor). Es nimmt einen Stream als Eingang an, filtert und transformiert seinen Inhalt und gibt das Ergebnis wie angewiesen aus.

In diesem Handbuch werden wir uns mit SED mit den regulären Ausdrücken (kurz Regex) ansehen, um den Inhalt in einer Textdatei zu ersetzen. Diese Anleitung verwendet die GNU/Linux -Version von SED.

Greifen Sie nach einer Beispieltextdatei

Zu Demonstrationszwecken erstellen wir eine einfache Textdatei mit einem Text, um unsere SED -Befehle zu üben. Erstellen Sie eine Textdatei mit Nano:

$ nano sed-practice.txt

Geben Sie in der Datei den folgenden Text ein:

#!/Bin/Bash
Echo "Der schnelle braune Fuchs"
Echo "springt über den faulen Hund"

Texte mit SED ersetzen

Die primäre Befehlsstruktur von SED zum Ersetzen von Texten ist wie folgt:

$ sed -i 's /// g'

Hier:

  • -I: Das Standardverhalten von SED besteht darin, die Ausgabe an den STDOut zu schreiben (Standardausgabe). Diese Flagge fordert SED jedoch an, stattdessen die Dateien zu bearbeiten. Wenn auch eine Erweiterung bereitgestellt wird (z. B. -I -i.Bak), eine Sicherung der Originaldatei wird erstellt.
  • S: weist SED an, eine Ersatzoperation auf dem angegebenen Strom durchzuführen.
  • /: Der Trennzeichencharakter.
  • : Ein regulärer Ausdruck für SED, der auf dem angegebenen Strom übereinstimmt.
  • : Die Ersatzzeichenfolge.
  • G: Flag. Standardmäßig stimmt SED nur überein und ersetzt die erste Instanz.

Probieren wir es aus. Im folgenden Beispiel ersetzen wir Die mit DER im Sed-Practice.txt:

$ sed -i 's/the/the/g' Sed -Practice.txt

Überprüfen Sie die Änderungen.

$ Cat Sed-Practice.txt

Wie Sie sehen können, haben wir den Inhalt der Datei erfolgreich geändert.

Arbeiten mit Trennzeichen arbeiten

Wie im vorherigen Abschnitt beschrieben, werden SED -Anweisungen mit Trennzeichen geliefert, um die verschiedenen Teile zu trennen. Wenn wir die Texte ersetzen möchten, die den Trennzeichen enthalten, müssen wir den Backslash (\) verwenden, um ihm zu entkommen.

Schauen wir uns das folgende Beispiel an:

$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' Sed -Practice.txt

Hier ersetzen wir die/bin/bash durch/usr/bin/zsh. Überprüfen Sie, ob der Versuch erfolgreich ist.

$ Cat Sed-Practice.txt

Mit diesem Zickzackmuster der Vorwärts- und Backslashes kann es leicht extrem verwirrend werden. Deshalb ist es eine übliche Praxis, andere Grenzwerte wie Colon (:) oder vertikale Balken (|) zu verwenden. Schreiben wir den Befehl mit vertikaler Balken als Trennzeichen um:

$ sed -i 's |/usr/bin/zsh |/bin/bash | g' SED -PRACTICE.txt

Regex -Zeichensätze

Wir können die Zeichensätze verwenden, um eine Reihe von Zeichen zu beschreiben, die in SED ersetzt werden sollen. Hier sind einige gemeinsame Zeichensätze, auf die Sie stoßen:

  • [A-Z]: Alle Kleinbuchstaben-Alphabete.
  • [A-Z]: Alle Großbuchstaben-Alphabete.
  • [0-9]: Alle Ziffern.

Im folgenden Beispiel ersetzen wir alle Ziffern durch das Alphabet. Schauen Sie sich das folgende Beispiel an:

$ echo 1001001 | sed -e 's | [0-9] | k | g'

Hier ersetzt SED alle Ziffern (1 und 0, in diesem Fall), die es mit dem Buchstaben k findet.

Was ist, wenn wir 1 durch A und 0 durch B ersetzen wollen?? Hier ist eine Möglichkeit, dies zu erreichen:

$ echo 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'

Hier ersetzt der erste SED -Befehl 1 durch a. Der Ausgang wird dann auf einen zweiten SED -Befehl geleitet, der 0 durch B ersetzt.

Abschluss

In diesem Leitfaden haben wir kurz die verschiedenen Möglichkeiten der Verwendung von SED gezeigt, um die Texte zu finden und zu ersetzen. Mit Hilfe von Regex konnten wir die Suche feinstimmen und den genauen Inhalt ersetzen. Erfahren Sie mehr über SED Regex.

Mit Hilfe einiger zusätzlicher Tools wie Find können wir SED verwenden, um die Dateien eines gesamten Verzeichnisses rekursiv zu ändern.

Wir können SED auch in den Bash -Skripten implementieren, um eine komplexere Bearbeitung von Streams durchzuführen. Erfahren Sie mehr über die Startreise mit Bash Scripting.