Was ist sed?
sed (Stream EDitor) ist ein leistungsstarkes Textverarbeitungsprogramm, das unter UNIX-ähnlichen Betriebssystemen wie Linux, macOS und Solaris weit verbreitet ist.
Funktionen und Vorteile von sed
sed ermöglicht es dir, Textdateien zeilenweise zu bearbeiten, indem du eine Reihe von Befehlen ausführst. Im Gegensatz zu Texteditoren wie Vim und nano arbeitet sed nicht interaktiv, sondern auf der Kommandozeile. Dies macht es ideal für die automatisierte Bearbeitung großer Textmengen in Skripten oder Shell-Befehlen.
Zu den wichtigsten Funktionen von sed gehören:
- Bearbeitung einzelner Zeilen: Du kannst bestimmte Zeilen in einer Datei auswählen und bearbeiten.
- Text ersetzen: Du kannst Text finden und durch anderen Text ersetzen.
- Einfügen und Löschen von Zeilen: Du kannst neue Zeilen einfügen oder vorhandene Zeilen löschen.
- Bearbeitung mehrerer Dateien: Du kannst mehrere Dateien gleichzeitig bearbeiten, was die Effizienz bei der Bearbeitung großer Datenmengen erhöht.
- Verwendung regulärer Ausdrücke: Du kannst komplexe Suchmuster mithilfe regulärer Ausdrücke erstellen, um Text präzise zu finden und zu bearbeiten.
- Bearbeitung von Textströmen: Du kannst sed auch zum Filtern und Bearbeiten von Textströmen aus anderen Befehlen oder Skripten verwenden.
Grundlegende Syntax von sed
Die grundlegende Syntax von sed
ist wie folgt:
sed [Optionen] 'Befehl' [Datei(en)]
Optionen
Einige nützliche Optionen, die du verwenden kannst, sind:
-
-i
: Änderungen direkt in der Originaldatei vornehmen (Vorsicht!) -
-n
: Standardausgabe unterdrücken (nur bei übereinstimmenden Zeilen drucken) -
-e
: Mehrere Befehle ausführen -
-f
: Befehle aus einer Datei laden
Befehl
Der Befehl gibt an, welche Aktion auf den Text angewendet werden soll. Hier sind einige grundlegende Befehle:
-
s/Alter_Text/Neuer_Text/
: Text ersetzen -
a\Neuer_Text
: Text anfügen -
d
: Zeile löschen
Syntax-Elemente
Weitere wichtige Syntaxelemente sind:
-
Trenner: Trennt Befehl und Optionen (
-
) -
Befehlsspezifikator: Gibt den auszuführenden Befehl an (z. B.
s
) - Suchmuster: Gibt den Text an, der gefunden werden soll
- Ersatztext: Gibt den Text an, durch den der gefundene Text ersetzt werden soll
- Adressen: Optionale Zeile oder Zeilenbereich, auf den der Befehl angewendet werden soll
Weitere Informationen
Weitere Informationen zur Syntax von sed
findest du in der Dokumentation, die online verfügbar ist.
Bearbeiten einzelner Zeilen
Mit sed
kannst du einzelne Zeilen in Textdateien bearbeiten. Dies ist nützlich, wenn du bestimmte Zeilen ändern, löschen oder einfügen möchtest, ohne den gesamten Inhalt der Datei zu bearbeiten.
Zeile adressieren
Um eine einzelne Zeile zu bearbeiten, musst du sie zunächst adressieren. Dies geschieht durch Angabe der Zeilennummer. Beispielsweise adressiert der Befehl sed '5'
die fünfte Zeile der Datei.
Text ändern
Um den Text in einer bestimmten Zeile zu ändern, verwendest du den Befehl s
. Die Syntax lautet wie folgt:
sed 's/Suchen/Ersetzen/[Optionen]'
Wobei:
- Suchen: Der zu suchende Text
- Ersetzen: Der Ersatztext
-
Optionen: Optionale Parameter zur Steuerung des Such- und Ersetzungsprozesses (z. B.
g
für globales Ersetzen)
Beispiel:
sed 's/dies/das/' datei.txt
Dieser Befehl ersetzt alle Vorkommen von "dies" mit "das" in der Datei datei.txt
.
Text löschen
Zum Löschen einer Zeile verwendest du den Befehl d
. Beispiel:
sed '5d' datei.txt
Dieser Befehl löscht die fünfte Zeile der Datei datei.txt
.
Text einfügen
Zum Einfügen einer Zeile verwendest du den Befehl i
. Die Syntax lautet:
sed 'i\Einfügetext'
Wobei:
- Einfügetext: Der einzufügende Text
Beispiel:
sed '2iNeue Zeile' datei.txt
Dieser Befehl fügt die Zeile "Neue Zeile" nach der zweiten Zeile der Datei datei.txt
ein.
Ersetzen von Text
Sed bietet leistungsstarke Möglichkeiten zum Ersetzen von Text in deinen Textdateien. Dies ist besonders nützlich, wenn du eine große Anzahl von Dateien bearbeiten musst und den Text konsistent ersetzen möchtest.
Grundlegende Syntax
Zum Ersetzen von Text verwendest du folgende Syntax:
sed 's/ALTER_TEXT/NEUER_TEXT/' dateiname
Dabei ist:
-
s
: Das Kommando zum Ersetzen -
ALTER_TEXT
: Der zu ersetzende Text -
NEUER_TEXT
: Der Ersatztext -
dateiname
: Die zu bearbeitende Datei
Optionen
Du kannst verschiedene Optionen verwenden, um die Ersetzung anzupassen:
- globale Ersetzung (g-Option): Ersetzt alle Vorkommen des Zieltexts.
- case-sensitive Ersetzung (i-Option): Berücksichtigt die Groß-/Kleinschreibung.
- Ersatz mit regulären Ausdrücken (r-Option): Verwendet reguläre Ausdrücke als Suchmuster.
- Ersetzen mit einer Zeichenkette aus einer Datei (f-Option): Liest den Ersatztext aus der angegebenen Datei.
Beispiel
Um beispielsweise alle "Linux" durch "Unix" in einer Datei mit dem Namen text.txt
zu ersetzen, würdest du folgenden Befehl verwenden:
sed 's/Linux/Unix/' text.txt
Wenn du alle Leerzeichen durch Unterstriche ersetzen möchtest, kannst du den regulären Ausdruck \s+
(ein oder mehrere Leerzeichen) verwenden:
sed 's/\s+/_/g' text.txt
Praktische Anwendungen
Das Ersetzen von Text ist eine vielseitige Funktion, die in verschiedenen Szenarien nützlich sein kann:
- Suchen und Ersetzen von Rechtschreib- oder Grammatikfehlern
- Konvertieren von Datei- oder Datenformaten
- Anonymisieren von Daten durch Ersetzen persönlicher Informationen
- Verbessern der Lesbarkeit durch Ersetzen langer oder komplexer Ausdrücke durch kürzere
Einfügen und Löschen von Zeilen
Wenn du Textzeilen in eine Datei einfügen oder daraus löschen möchtest, bietet sed praktische Befehle.
Einfügen von Zeilen
Um eine Zeile an einer bestimmten Position in die Datei einzufügen, verwende das i
-Kommando. Die Syntax lautet:
i\
[Text, der eingefügt werden soll]
Beispiel: Füge eine neue Zeile nach der dritten Zeile der Datei text.txt
ein:
3iDies ist eine neue Zeile.
Löschen von Zeilen
Wenn du Zeilen aus einer Datei löschen möchtest, kannst du das d
-Kommando verwenden. Die Syntax lautet:
d
Beispiel: Lösche die zweite Zeile der Datei text.txt
:
2d
Kombinieren von Zeilen
Du kannst die Befehle i
und d
kombinieren, um Zeilen einzufügen und gleichzeitig andere zu löschen. Dies ist hilfreich, wenn du Textblöcke verschieben oder ersetzen möchtest.
Beispiel: Ersetze die zweite und dritte Zeile in text.txt
durch eine neue Zeile:
2,3d
2iDies ist eine neue Zeile.
Bedingungen für Einfügen und Löschen
Du kannst das Einfügen und Löschen von Zeilen mithilfe von Bedingungen steuern. Dies ist nützlich, wenn du nur bestimmte Zeilen basierend auf ihrem Inhalt bearbeiten möchtest.
Beispiel: Lösche Zeilen in text.txt
, die das Wort "Beispiel" enthalten:
/^Beispiel/d
Durch die Verwendung von sed kannst du Textdateien effizient bearbeiten, indem du Zeilen einfügst, löschst oder durch andere ersetzt. Diese Befehle bieten dir viel Flexibilität und Kontrolle über den Bearbeitungsprozess.
Bearbeitung mehrerer Dateien
Wenn du mehrere Textdateien mit denselben Befehlen bearbeiten möchtest, kannst du sed verwenden, um sie stapelweise zu verarbeiten.
Batch-Bearbeitung
Um mehrere Dateien zu bearbeiten, verwende die Option -f
(oder --file
), um eine Skriptdatei zu übergeben, die die sed-Befehle enthält. Du kannst einen Platzhalter verwenden (*
), um alle Dateien in einem Verzeichnis auszuwählen.
sed -f befehle.sed *
Batch-Bearbeitung mit erweitertem Dateinamen
Wenn du den Dateinamen jeder bearbeiteten Datei ausdrucken möchtest, verwende die Option -n
. Du kannst auch die Option -E
verwenden, um erweiterte reguläre Ausdrücke zu aktivieren.
sed -n -E -f befehle.sed *
Batch-Bearbeitung mit geändertem Trennzeichen
Standardmäßig verwendet sed das Zeilenumbruchszeichen (\n
) als Trennzeichen für Befehle in einer Skriptdatei. Wenn du ein anderes Trennzeichen verwenden möchtest, kannst du die Option -e
verwenden.
sed -e 's/\t/:/g' -f befehle.sed *
Batch-Bearbeitung mit Eingabe aus einer Rohrleitung
Du kannst sed auch verwenden, um Text aus einer Rohrleitung zu bearbeiten. Dies ist nützlich, wenn du die Ausgabe eines anderen Befehls verarbeiten möchtest.
cat datei1 datei2 | sed -f befehle.sed
Batch-Bearbeitung mit bedingten Verzweigungen
Wenn du bedingte Verzweigungen in deinem Skript verwenden möchtest, kannst du die -r
-Option verwenden, um erweiterte reguläre Ausdrücke und die -i
-Option, um die Dateien direkt zu bearbeiten.
sed -i -r 's/text/ersetzt/g' *
Einsatz von regulären Ausdrücken
Reguläre Ausdrücke bieten dir die Möglichkeit, komplexe Textmuster anzupassen und zu bearbeiten. Sie ermöglichen es dir, nach Zeichenfolgen oder Textstrukturen zu suchen, die einem bestimmten Muster entsprechen.
Das grundlegende Muster
Ein regulärer Ausdruck besteht aus einer Folge von Zeichen, die ein Muster definieren. Es gibt verschiedene Arten von Sonderzeichen, die eine besondere Bedeutung haben:
-
Metazeichen: Diese Zeichen haben eine spezielle Bedeutung, wie z. B.
.
,*
und+
. - Escape-Zeichen: Sie können verwendet werden, um die besondere Bedeutung eines anderen Zeichens aufzuheben.
- Charakterklassen: Sie definieren eine Gruppe von Zeichen, die zulässig sind.
Verwendung von regulären Ausdrücken mit sed
Um reguläre Ausdrücke in sed zu verwenden, musst du das -r
-Flag verwenden. Dies aktiviert den erweiterten Modus, der die Verwendung regulärer Ausdrücke zulässt.
Beispiel: Um alle Zeilen zu suchen, die das Wort "Linux" enthalten, kannst du den folgenden Befehl verwenden:
sed -r '/Linux/'
Erweitertes Beispiel
Du kannst auch Gruppen und Rückverweise verwenden, um komplexere übereinstimmende Muster zu erstellen.
Beispiel: Um die erste Instanz des Wortes "Linux" zu ersetzen und in Großbuchstaben zu schreiben, kannst du den folgenden Befehl verwenden:
sed -r 's/Linux/LINUX/'
Ressourcen für reguläre Ausdrücke
Es gibt viele Ressourcen, die dir helfen können, reguläre Ausdrücke für sed zu erlernen und zu verstehen. Hier sind einige nützliche Links:
Bearbeitung von Textströmen
Neben Textdateien kannst du mit sed auch direkt Textströme bearbeiten. Dies ist besonders nützlich, wenn du Daten aus Befehlszeilenausgaben oder anderen Programmen verarbeitest.
Einfache Textstrombearbeitung
Um einen Textstrom zu bearbeiten, verwendest du das Präfix -e
gefolgt vom sed-Befehl. Beispielsweise ersetzt der folgende Befehl alle Leerzeichen im Textstrom durch Unterstriche:
echo "Dies ist ein Text mit Leerzeichen" | sed -e 's/ /_/g'
Verarbeitung von Befehlszeilenausgaben
Du kannst sed auch verwenden, um die Ausgaben anderer Befehle zu bearbeiten. Dies ermöglicht dir die einfache Extraktion oder Filterung von Daten. Beispielsweise extrahiert der folgende Befehl nur die Dateinamen aus einer Ausgabe von ls
:
ls -l | sed -e 's/^.... .*$/\2/'
Verwendung von regulären Ausdrücken in Textströmen
Auch bei der Bearbeitung von Textströmen kannst du reguläre Ausdrücke verwenden. Dies gibt dir noch mehr Flexibilität bei der Verarbeitung komplexer Daten. Beispielsweise entfernt der folgende Befehl alle Zeilen aus einem Textstrom, die mit "Fehler" beginnen:
grep 'Fehler' | sed -e '/^Fehler/d'
Bearbeitung von Textströmen aus Rohrleitungen
Du kannst sed auch als Teil einer Pipeline verwenden, um Daten aus mehreren Quellen zu verarbeiten. Beispielsweise kannst du den folgenden Befehl verwenden, um Daten aus einer Datei zu extrahieren, sie zu bearbeiten und dann in eine andere Datei zu schreiben:
cat datei.txt | sed -e 's/alt/neu/g' | tee neue_datei.txt
Weitere Beispiele für die Verwendung von sed
-
Filterung von Daten: Du kannst sed verwenden, um bestimmte Zeilen aus einem Textstrom auszuwählen. Beispielsweise filtert der folgende Befehl nur Zeilen, die das Wort "Beispiel" enthalten:
grep 'Beispiel' | sed -e '/Beispiel/!d'
-
Konvertierung von Datenformaten: Du kannst sed verwenden, um Daten von einem Format in ein anderes zu konvertieren. Beispielsweise konvertiert der folgende Befehl CSV-Daten in JSON:
cat daten.csv | sed -e 's/,/\",\"/g' -e 's/^/\"/g' -e 's/$/\"/g'
-
Automatisierung von Aufgaben: Du kannst sed-Befehle in Skripten verwenden, um Aufgaben zu automatisieren. Beispielsweise kannst du das folgende Skript verwenden, um alle Leerzeichen in einem Verzeichnis von Textdateien zu entfernen:
#!/bin/bash for file in *.txt; do sed -i -e 's/ /_/g' "$file" done
Automatisierte Bearbeitung mit Skripten
Wenn du häufig ähnliche Änderungen an Textdateien vornehmen musst, kannst du mit sed Skripte erstellen, um diese Aufgabe zu automatisieren. Ein sed-Skript ist eine Abfolge von Befehlen, die du auf eine Textdatei anwenden kannst.
Vorteile von sed-Skripten
- Zeitersparnis: Skripte können die Bearbeitungszeit erheblich reduzieren, indem sie wiederkehrende Aufgaben automatisieren.
- Einheitlichere Ergebnisse: Skripte stellen sicher, dass alle Änderungen auf einheitliche Weise vorgenommen werden, wodurch Fehler und Inkonsistenzen vermieden werden.
- Mehr Funktionalität: Skripte ermöglichen es dir, komplexere Bearbeitungen durchzuführen, die mit einzelnen sed-Befehlen nicht möglich sind.
Erstellen eines sed-Skripts
Um ein sed-Skript zu erstellen, öffne einen Texteditor und gib die folgenden Befehle ein:
#!/bin/sed -f
Dies ist die Shebang-Zeile, die dem System mitteilt, dass die Datei ein sed-Skript ist. Füge anschließend die sed-Befehle hinzu, die du ausführen möchtest. Speichere die Datei mit der Erweiterung .sed
, z. B. mein_skript.sed
.
Ausführen eines sed-Skripts
Um ein sed-Skript auszuführen, verwende den folgenden Befehl:
sed -f mein_skript.sed <eingabedatei> >ausgabedatei
Wobei:
-
-f mein_skript.sed
: Das sed-Skript, das ausgeführt werden soll -
<eingabedatei>
: Die Textdatei, die bearbeitet werden soll -
>ausgabedatei
: Die Datei, in die die Ausgabe geschrieben werden soll
Beispiel für ein sed-Skript
Nehmen wir an, du hast eine Textdatei namens daten.txt
, die folgende Daten enthält:
Name: John Doe
Alter: 30
Beruf: Ingenieur
Du kannst das folgende sed-Skript erstellen, um den Beruf in "Softwareentwickler" zu ändern:
#!/bin/sed -f
s/Beruf: Ingenieur/Beruf: Softwareentwickler/
Wenn du dieses Skript mit dem Befehl sed -f beruf_aendern.sed daten.txt > neue_daten.txt
ausführst, wird folgende Ausgabe in der Datei neue_daten.txt
erstellt:
Name: John Doe
Alter: 30
Beruf: Softwareentwickler
Beispiele für die praktische Anwendung
Dateinamen umbenennen
sed -i 's/\.txt/\.log/g' *.txt
Beispiel: Alle .txt-Dateien im aktuellen Verzeichnis in .log-Dateien umbenennen.
HTML-Dateien bereinigen
sed -i 's/<[^>]*>//g' *.html
Beispiel: Alle HTML-Tags aus HTML-Dateien im aktuellen Verzeichnis entfernen.
Zeilenweise sortieren
sed -i '$!N;s/\n//g;s/([^,]+),([^,]+),\([^,]+),\([^,]+)/\1,\3,\2,\4/' filename.txt
Beispiel: Sortiert die Spalten einer CSV-Datei (filename.txt) in der Reihenfolge: Spalte 1, Spalte 3, Spalte 2, Spalte 4.
Aus Dateien extrahieren
sed -n '/BEGIN/,/END/p' filename.txt
Beispiel: Extrahiert Textblöcke zwischen den Markierungen "BEGIN" und "END" aus filename.txt.
Daten aus JSON-Dateien abrufen
sed -n '/"name"/,/}/p' data.json
Beispiel: Gibt den Wert des Schlüssels "name" aus einer JSON-Datei (data.json) aus.
Text in Pipes verarbeiten
cat filename.txt | sed '/pattern/d'
Beispiel: Löscht alle Zeilen aus filename.txt, die dem Muster "pattern" entsprechen, und gibt das Ergebnis in eine Pipe aus.
Batch-Bearbeitung mit Skripten
#!/bin/bash
for file in *.txt; do
sed -i 's/old_text/new_text/g' "$file"
done
Beispiel: Ersetzt in allen .txt-Dateien im aktuellen Verzeichnis "old_text" mit "new_text".