Stärken Sie Ihre Befehlszeilenfähigkeiten mit diesen sed-Beispielen

Haben Sie nach einer anderen Möglichkeit gesucht, Bearbeitungsvorgänge an Texten durchzuführen? Suchen Sie nicht weiter! Dieses Tutorial bietet Ihnen Beispiele für den Einsatz des Stream-Editors Sed.

Kurz gesagt ermöglicht es Sed, eine Vielzahl von Bearbeitungen an Dateien und Text-Streams auf eine nicht-interaktive Weise durchzuführen. Sie treffen die Bearbeitungsentscheidungen, während Sie die Befehle aufrufen. In diesem Tutorial lernen Sie, wie Sie Sed-Befehle verwenden und Ihren Workflow effektiv optimieren können.

Lesen Sie weiter und verbessern Sie Ihre Kenntnisse in der Befehlszeile!

Voraussetzungen

Stellen Sie sicher, dass Sie Folgendes haben, um der praktischen Demonstration in diesem Tutorial folgen zu können:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

Installation von Sed auf Ubuntu

Sed ist in der Regel als Standarddienstprogramm in den meisten Unix-ähnlichen Betriebssystemen enthalten, einschließlich Linux und macOS. Aber trotzdem ist es ratsam, vor der Durchführung von Texttransformationen zu überprüfen, ob Sie bereits Sed auf Ihrem System haben. Dies ist ein grundlegender Schritt.

1. Öffnen Sie Ihr Terminal und führen Sie den folgenden sed-Befehl aus, um zu überprüfen, welche Sed-Version auf Ihrem System installiert ist.

sed --version

Wenn Sed installiert ist, sehen Sie die Sed-Version und einige Informationen über den Build, wie unten dargestellt.

Verifying sed’s installed version

Andernfalls wird die unten stehende Fehlermeldung angezeigt, wenn sed nicht installiert ist.

Diese Fehlermeldung deutet darauf hin, dass der sed-Befehl nicht in der PATH-Umgebungsvariable Ihres Systems gefunden wurde.

Getting an error running sed commands

2. Führen Sie anschließend den [apt-get update unten stehenden Befehl aus, um sed auf Ihrem System zu aktualisieren und zu installieren.

Dieser Befehl ruft die neuesten Paketinformationen von den konfigurierten Paketquellen ab, einschließlich der Abhängigkeiten, Dateien und Skripte des Pakets. Das Ausführen dieses Befehls ist notwendig, um sicherzustellen, dass Sie die neueste Version von sed und eventuell benötigte andere Pakete installieren.

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. Führen Sie abschließend den folgenden Befehl aus, um zu überprüfen, ob der sed-Befehl auf Ihrem System installiert ist.

Dieser Befehl gibt den vollständigen Pfad zur ausführbaren sed-Datei aus, der in diesem Beispiel /usr/bin/sed ist.

Sobald Sie sed installiert und überprüft haben, dass es in Ihrem PATH vorhanden ist, können Sie den sed-Befehl verwenden, um verschiedene Texttransformationen und Manipulationen durchzuführen.

which sed
Verifying that the sed command is installed

Ersetzen von Zeichenketten in einer Textdatei

Sed ist ein beliebter Stream-Editor, der auf den meisten Unix-ähnlichen Betriebssystemen verfügbar ist, und eine der nützlichsten Funktionen von sed besteht darin, Zeichenketten in einer Textdatei zu ersetzen.

Hier sind einige Szenarien, bei denen das Ersetzen von Zeichenketten hilfreich ist, aber nicht darauf beschränkt.

  • Aktualisierung einer Liste von URLs, um einen neuen Domainnamen widerzuspiegeln.
  • Ändern von Produkt-IDs in einer Datenbank oder CSV-Datei.
  • Formatieren von Daten für den Import in ein anderes System und vieles mehr.

Die grundlegende Syntax für die Verwendung von sed ist wie folgt, wobei:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

Angenommen, Sie haben eine Textdatei namens urls.txt, die eine Liste von URLs enthält, und möchten alle URLs aktualisieren, um einen neuen Domainnamen zu verwenden.

1. Führen Sie die unten angegebenen echo-Befehle aus, um die Datei urls.txt im aktuellen Verzeichnis zu erstellen. Diese Befehle geben keine Ausgabe aus, sondern schreiben die angegebenen Texte in die Datei.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. Führen Sie anschließend den cat-Befehl aus, um den Inhalt der Datei urls.txt anzuzeigen. cat urls.txt

cat urls.txt

Die Ausgabe bestätigt die drei alten URLs, die in der Datei urls.txt geschrieben wurden.

Viewing the contents of the urls.txt file

3. Führen Sie nun den folgenden Befehl aus, um alle Vorkommnisse der Zeichenkette old-domain.com durch new-domain.com in der Datei urls.txt zu finden und zu ersetzen.

sed 's/old-domain.com/new-domain.com/' urls.txt

Sie werden feststellen, dass die URLs in Ihrer Eingabedatei mit der neuen Domain aktualisiert wurden, wie gezeigt.

Replacing a string in a text file

Ersetzen des N-ten Vorkommens einer Zeichenkette

Zusätzlich zur grundlegenden Suchen-und-Ersetzen-Funktionalität verfügt sed über zusätzliche integrierte Befehle, mit denen Sie komplexere Texttransformationen durchführen können. Ein solcher Fall ist das Ersetzen des n-ten Vorkommens der Musterzeichenkette in einer einzelnen Textzeile.

Zum Beispiel möchten Sie das zweite Feld in einer CSV-Datei mit einem neuen Wert aktualisieren oder das dritte Vorkommen einer Zeichenkette in einem Datenbankdump aktualisieren.

Der grundlegende Syntax für diesen Befehl ist wie folgt, wobei:

  • pattern – der zu ersetzende String ist.
  • replacement – der String, der als Ersatz verwendet werden soll.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

Um zu sehen, wie das n-te Vorkommen eines Strings ersetzt wird, befolgen Sie diese Schritte:

Führen Sie den folgenden echo-Befehl aus, um eine Zeile Text mit drei Vorkommen des Musters quick zu erstellen. Der sed-Befehl ersetzt dann das zweite Vorkommen (2) des Musters quick durch den String fast.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

Wie Sie unten sehen können, wurde nur das zweite Vorkommen des Musters quick durch den String fast ersetzt, während alle anderen Vorkommen unverändert bleiben.

Der Befehl nth ist standardmäßig case-sensitive. Daher sucht der Befehl nur nach der genauen Übereinstimmung des Musters. Um die Groß- und Kleinschreibung des Musters zu ignorieren, gehen Sie zum folgenden Schritt.

Replacing the nth occurrence of a string

?Beachten Sie, dass der nth-Befehl Vorkommen des Musters von links nach rechts zählt. Außerdem funktioniert der nth-Befehl nur auf einer einzigen Zeile Text. Um eine Substitution auf mehreren Zeilen durchzuführen, verwenden Sie eine andere Methode, die im folgenden Abschnitt demonstriert wird.

Führen Sie als Nächstes den folgenden Befehl aus, um das zweite (2) Vorkommen des Musters quick durch fast zu ersetzen und dabei die Groß- und Kleinschreibung zu ignorieren (i).

Die Option i ist nützlich, wenn Sie mit Text arbeiten, der inkonsistente Groß- und Kleinschreibung aufweist.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

Im folgenden Output wird das zweite Vorkommen des Wortes „quick“ erfolgreich durch den String „schnell“ ersetzt – unabhängig von der Groß- und Kleinschreibung.

Replacing the nth occurrence of a string while ignoring the letter case

Ersetzen aller Vorkommen eines übereinstimmenden Musters/einer übereinstimmenden Zeichenfolge

Anstatt das n-te Vorkommen einer Zeichenfolge zu ersetzen, planen Sie möglicherweise, alle Vorkommen zu ersetzen. Dies hilft dramatisch bei Ihrem Plan, jedes Vorkommen einer Copyright-Zeichenfolge durch das aktuelle Jahr zu aktualisieren, zum Beispiel.

1. Erstellen Sie eine Datei namens input.txt mit dem folgenden Inhalt in Ihrem bevorzugten Texteditor.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. Führen Sie dann den folgenden Befehl aus, um alle Vorkommen des Wortes quick durch fast aus der Datei input.txt zu ersetzen. Sobald ersetzt, werden die Änderungen in die Datei output.txt geschrieben.

sed 's/quick/fast/g' input.txt > output.txt

3. Führen Sie nun den folgenden Befehl aus, um die Inhalte der Datei output.txt anzuzeigen und zu überprüfen, ob der Ersatz erfolgt ist.

cat output.txt

Sie sehen, dass alle Vorkommen des Wortes quick durch fast ersetzt wurden, wie unten gezeigt. Ähnlich wie der nth-Befehl ist der g-Befehl zeichensensitiv und ersetzt nur die exakten Übereinstimmungen.

Die Zeichenfolge Quick wird nicht ersetzt, wie unten gezeigt, aber Sie können die Option i verwenden, um Groß- und Kleinschreibung zu ignorieren.

Replacing All the Occurrences of a Matching Pattern/String

Ersetzen eines übereinstimmenden Musterstrings auf einer bestimmten Zeile

Vielleicht wissen Sie bereits, auf welcher Zeile im String Sie den zu ersetzenden Text haben möchten. Warum alle Vorkommen ersetzen, wenn Sie Zeichenfolgen auf bestimmten Zeilen ersetzen können? Diese Funktion ist nützlich, wenn Sie Änderungen an einer bestimmten Zeile in einer Datei oder einem Stream vornehmen möchten, während die anderen Zeilen unberührt bleiben.

Unten finden Sie die Syntax zum Ersetzen einer Zeichenfolge ab einer bestimmten Zeile, wobei n die Zeilennummer repräsentiert.

sed 'n s/pattern/replacement/' input_file output_file

1. Erstellen Sie eine Datei namens myfile.txt mit dem folgenden Inhalt.

test1
test2
test3

2. Führen Sie anschließend den unten stehenden sed-Befehl aus, um Folgendes durchzuführen:

  • Suchen Sie nach dem Wort test2 ab der zweiten Zeile (2) der Datei myfile.txt. Ersetzen Sie (s) das Wort test2 durch test2_changed. Schreiben Sie die Änderungen (>) in eine neue Datei namens myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. Führen Sie schließlich den unten stehenden Cat-Befehl aus, um den Inhalt der Datei myfile_changed.txt anzuzeigen.

cat myfile_changed.txt

Wie Sie unten sehen können, wurde die zweite Zeile der myfile.txt-Datei durch test2_changed ersetzt, während alle anderen Zeilen unverändert bleiben.

Verifying the changed string on a specific line

Ausgabe der ausschließlich geänderten Zeilen von Zeichenfolgen

Anstatt den gesamten Inhalt einer Datei nach Änderungen auszugeben, möchten Sie möglicherweise nur die geänderten Zeilen ausgeben. Wie? Indem Sie die p-Flagge zusammen mit der -n-Option verwenden.

Unten finden Sie die Syntax zum ausschließlichen Drucken geänderter Zeilen von Zeichenfolgen, wobei:

  • Die -n-Option sagt sed, das Standardverhalten des Druckens jeder Zeile zu unterdrücken.
  • Die Flagge p gibt an, dass sed die Ausgabe des Befehls drucken soll.
sed -n 's/pattern/replacement/p' input_file output_file

Öffnen Sie Ihre Datei myfile.txt und ersetzen Sie den Inhalt durch folgenden. Beachten Sie, dass die zweite Zeile falsch ist, da das Wort first stattdessen second sein sollte.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

Führen Sie nun den unten stehenden sed-Befehl aus, um den String first in der zweiten Zeile (2) der Datei myfile.txt zu ersetzen, aber geben Sie nur die geänderten Zeilen aus (p).

sed -n '2 s/first/second/p' myfile.txt

Sie sehen die Ausgabe der modifizierten zweiten Zeile nur in Ihrem Terminal, wie unten gezeigt.

Outputting changed lines exclusively

Fazit

In diesem Tutorial haben Sie verschiedene Beispiele für die Verwendung von sed verwendet, um Such- und Ersetzungsvorgänge durchzuführen. Darüber hinaus haben Sie fortgeschrittenere Techniken wie das Ersetzen bestimmter Vorkommen und das Ausgeben nur der modifizierten Zeilen behandelt.

sed ist ein leistungsstarkes Kommandozeilentool, das es Ihnen ermöglicht, verschiedene Textmanipulationsaufgaben durchzuführen. Ob globale Ersetzungen in einer gesamten Datei oder gezielte Ersetzungen in bestimmten Zeilen, sed erledigt den Job.

Warum erkunden Sie nicht mehr über reguläre Ausdrücke? Reguläre Ausdrücke sind für viele Textmanipulationstools, einschließlich sed, unerlässlich. Diese Ausdrücke sparen Zeit und reduzieren den Aufwand, insbesondere bei komplexen Such- und Ersetzungsvorgängen in großen Textmengen.

Source:
https://adamtheautomator.com/sed-examples/