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.
Wenn Sed installiert ist, sehen Sie die Sed-Version und einige Informationen über den Build, wie unten dargestellt.

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.

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.

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.

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. |
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.
2. Führen Sie anschließend den cat
-Befehl aus, um den Inhalt der Datei urls.txt anzuzeigen. cat urls.txt
Die Ausgabe bestätigt die drei alten URLs, die in der Datei urls.txt geschrieben wurden.

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.
Sie werden feststellen, dass die URLs in Ihrer Eingabedatei mit der neuen Domain aktualisiert wurden, wie gezeigt.

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…).
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
.
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.

?Beachten Sie, dass der
nth
-Befehl Vorkommen des Musters von links nach rechts zählt. Außerdem funktioniert dernth
-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.
Im folgenden Output wird das zweite Vorkommen des Wortes „quick“ erfolgreich durch den String „schnell“ ersetzt – unabhängig von der Groß- und Kleinschreibung.

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

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.
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 Dateimyfile.txt
. Ersetzen Sie (s
) das Worttest2
durchtest2_changed
. Schreiben Sie die Änderungen (>
) in eine neue Datei namensmyfile_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.
3. Führen Sie schließlich den unten stehenden Cat-Befehl aus, um den Inhalt der Datei myfile_changed.txt
anzuzeigen.
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.

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 sagtsed
, das Standardverhalten des Druckens jeder Zeile zu unterdrücken. - Die Flagge
p
gibt an, dasssed
die Ausgabe des Befehls drucken soll.
Ö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
).
Sie sehen die Ausgabe der modifizierten zweiten Zeile nur in Ihrem Terminal, wie unten gezeigt.

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.