Den Linux-sed-Befehl sicher beherrschen: Syntax, Beispiele und praktische Textverarbeitung

Der Linux-Befehl sed (Stream Editor) ist ein vielseitiges Werkzeug zur Bearbeitung von Text. Mit ihm lassen sich Inhalte in Dateien suchen, ersetzen, einfügen und entfernen. Dieses Tutorial bietet eine ausführliche Einführung in den sed-Befehl und zeigt anhand praktischer Beispiele, Syntax-Erklärungen und fortgeschrittener Anwendungsfälle, wie er eingesetzt wird.

Was ist der sed-Befehl?

Der sed-Befehl ist ein Stream-Editor, der Text zeilenweise verarbeitet. Dadurch können Dateiinhalte geändert werden, ohne die Datei direkt in einem Texteditor zu öffnen. Besonders häufig wird er in Shell-Skripten und in der Systemadministration verwendet, um Aufgaben der Textverarbeitung zu automatisieren.

Wichtige Funktionen von sed

  1. Mustererkennung und Ersetzen
  2. Direkte Bearbeitung von Dateien
  3. Filtern und Verarbeiten von Text
  4. Unterstützung für reguläre Ausdrücke
  5. Arbeiten über mehrere Zeilen hinweg

Grundlegende Syntax des sed-Befehls

Der grundlegende Aufbau des sed-Befehls besteht aus drei zentralen Bestandteilen: den Befehlsoptionen, einem Skript mit den Bearbeitungsanweisungen und der Datei, die verarbeitet werden soll.

Mit dieser Struktur lässt sich festlegen, wie sich der Befehl verhalten soll, welche Textänderungen durchgeführt werden und auf welche Datei diese angewendet werden.

Befehlsoptionen: Sie bestimmen das Verhalten des Befehls. So steht beispielsweise die Option -i für die direkte Bearbeitung einer Datei, wodurch die Originaldatei überschrieben wird.

Skript: Das Skript enthält die Bearbeitungsanweisungen. Es kann in einfache Anführungszeichen () oder doppelte Anführungszeichen () gesetzt werden. Innerhalb des Skripts können ein oder mehrere Bearbeitungsbefehle stehen, die jeweils durch ein Semikolon (;) getrennt werden.

Eingabedatei: Dabei handelt es sich um die Datei, die verarbeitet werden soll. Es kann eine einzelne Datei oder eine Liste mehrerer Dateien sein, die durch Leerzeichen getrennt sind. Wenn keine Datei angegeben wird, liest sed aus der Standardeingabe.

Die allgemeine Syntax des sed-Befehls sieht wie folgt aus:

sed [options] 'script' file

In dieser Syntax steht sed für den eigentlichen Befehl, [options] für die Befehlsoptionen, ’script‘ für die Bearbeitungsanweisungen und file für die zu verarbeitende Datei.

sed [options] 'script' file

Mit den folgenden Beispielen wird die Funktionsweise noch verständlicher.

sed 's/hello/world/' sample.txt

Dieser Befehl ersetzt in jeder Zeile von sample.txt das erste Vorkommen von hello durch world.

Häufig verwendete Optionen in sed

Option Beschreibung Beispiel
-i Bearbeitet die Datei direkt sed -i 's/old/new/' file.txt
-n Unterdrückt die automatische Ausgabe sed -n '/pattern/p' file.txt
-e Führt mehrere Befehle aus sed -e 's/old/new/' -e '/pattern/d' file.txt
-f Liest Befehle aus einer Datei ein sed -f script.sed file.txt
-r Verwendet erweiterte reguläre Ausdrücke sed -r 's/old/new/' file.txt
-E Verwendet erweiterte reguläre Ausdrücke, ähnlich wie -r sed -E 's/old/new/' file.txt
-z Behandelt Zeilen so, als wären sie durch das NUL-Zeichen getrennt sed -z 's/old/new/' file.txt
-l Legt die Zeilenlänge für den l-Befehl fest sed -l 100 'l' file.txt
-b Verwendet den Binärmodus und entfernt keine CR-Zeichen sed -b 's/old/new/' file.txt

Die häufigsten Anwendungsfälle von sed

Im Folgenden finden Sie einige der praktischsten Einsatzmöglichkeiten des sed-Befehls.

Legen Sie zunächst eine Beispieldatei mit dem Namen file1.txt an und fügen Sie den folgenden Inhalt ein, damit Sie die Beispiele leichter nachvollziehen können.

Fügen Sie anschließend diesen Text ein:

Linux is a family of free and open-source operating systems based on the Linux kernel.
Operating systems based on Linux are known as Linux distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Suchen und Ersetzen

Im folgenden Befehl steht s für die Ersetzungsoperation, während die Zeichen / als Trennzeichen dienen. /Linux/ ist das Suchmuster und Unix der Ersetzungstext.

Hinweis: Standardmäßig ersetzt sed pro Zeile nur das erste gefundene Vorkommen eines Musters. Weitere Vorkommen in derselben Zeile bleiben unverändert.

sed 's/Linux/Unix/' file1.txt

Dieser Befehl ersetzt in jeder Zeile das erste Auftreten von Linux durch Unix.

Ausgabe:

Unix is a family of free and open-source operating systems based on the Linux kernel.
Operating systems based on Unix are known as Linux distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Unix, and many others.

Globales Ersetzen innerhalb jeder Zeile

Das Substitutions-Flag /g weist sed an, jedes Vorkommen des Suchbegriffs innerhalb einer Zeile zu ersetzen.

sed 's/Linux/Unix/g' file1.txt

Dieser Befehl ersetzt in jeder Zeile sämtliche Vorkommen von Linux durch Unix.

Ausgabe:

Unix is a family of free and open-source operating systems based on the Unix kernel.
Operating systems based on Unix are known as Unix distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Unix, and many others.

Direkte Bearbeitung in der Datei

Mit der Option -i kann die Datei unmittelbar bearbeitet werden. Einfach gesagt wird dadurch die Originaldatei überschrieben.

sed -i 's/Linux/Unix/' file1.txt

Dieser Befehl ändert file1.txt direkt, indem Linux durch Unix ersetzt wird. Ohne -i erscheint die Änderung nur in der Ausgabe und wird nicht in die Datei geschrieben. Damit die Anpassung dauerhaft gespeichert wird, muss die Option -i verwendet werden.

Bestimmte Zeilen löschen

Dieser Befehl entfernt die zweite Zeile aus file1.txt.

Ausgabe:

Unix is a family of free and open-source operating systems based on the Linux kernel.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Unix, and many others.

Bestimmte Zeilen ausgeben

Die Option -n unterdrückt die automatische Ausgabe des Pattern Space, und p ist der Druckbefehl.

Dieser Befehl gibt die Zeilen 1 bis 2 aus file1.txt aus.

Ausgabe:

Unix is a family of free and open-source operating systems based on the Unix kernel.
Operating systems based on Unix are known as Unix distributions or distros.

Zeilen löschen, die einem Muster entsprechen

Der Ausdruck /pattern/ trifft auf Zeilen zu, die das gesuchte Muster enthalten, und der Befehl d entfernt diese Zeilen.

Dieser Befehl löscht jede Zeile, in der das Wort kernel vorkommt.

Ausgabe:

Operating systems based on Unix are known as Unix distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Unix, and many others.

Ersetzen mit Sicherungsdatei

Der folgende Befehl ändert jedes Vorkommen von Unix zurück zu Linux und erstellt gleichzeitig eine Sicherungsdatei namens file1.txt.bak, die den vorherigen Dateiinhalt enthält. Die Option -i.bak führt die Bearbeitung direkt in der Datei durch und erstellt zusätzlich eine Backup-Datei.

sed -i.bak 's/Unix/Linux/g' file1.txt

Ausgabe:

Linux is a family of free and open-source operating systems based on the Linux kernel.
Operating systems based on Linux are known as Linux distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Nachfolgend sehen Sie den Inhalt der Sicherungsdatei file1.txt.bak.

Ausgabe

Unix is a family of free and open-source operating systems based on the Unix kernel.
Operating systems based on Unix are known as Unix distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Unix, and many others.

Tabulatoren durch Leerzeichen ersetzen

Mit dem folgenden Befehl wird jedes Tabulatorzeichen durch vier Leerzeichen ersetzt. Die Sequenz \t steht für Tabulatoren, und das Flag /g sorgt dafür, dass die Ersetzung in der gesamten Zeile erfolgt.

Ausgabe:

   Linux is a family of free and open-source operating systems based on the Linux kernel.
Operating systems based on Linux are known as Linux distributions or distros.
Examples     include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Leere Zeilen entfernen

Der folgende Befehl entfernt alle leeren Zeilen aus file1.txt. Das Muster /^$/ erkennt leere Zeilen, und der Befehl d löscht diese Treffer.

Sie können die Datei file1.txt mit dem Texteditor vi öffnen und einige Leerzeilen einfügen, um diesen Befehl zu testen.

Zeilen ausgeben, die einem Muster entsprechen

Der folgende Befehl zeigt ausschließlich die Zeilen an, in denen Ubuntu vorkommt.

sed -n '/Ubuntu/p' file1.txt

Die Option -n schaltet die automatische Ausgabe ab. /Ubuntu/ erkennt Zeilen mit diesem Muster, und p gibt die passenden Zeilen aus.

Ausgabe:

Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Erweiterte Anwendungsfälle von sed

Dieser Abschnitt behandelt mehrere fortgeschrittene und komplexere Möglichkeiten, den sed-Befehl einzusetzen.

Text vor einer Zeile einfügen

Der folgende Befehl fügt This is inserted text. vor der zweiten Zeile in file1.txt ein.

sed -i '2i\This is inserted text.' file1.txt

Die Option -i aktiviert die direkte Bearbeitung in der Datei, während 2i\ den Text vor der zweiten Zeile einfügt.

Hinweis: Ohne -i erscheint der eingefügte Text nur in der Ausgabe und verändert die Datei nicht dauerhaft. Soll die Änderung gespeichert werden, muss -i zusammen mit sed verwendet werden.

Ausgabe:

Linux is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Linux are known as Linux distributions or distros.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Das n-te Vorkommen eines Musters in einer Zeile ersetzen

Mit Flags wie /1 oder /2 lässt sich das erste oder zweite Auftreten eines Musters innerhalb einer Zeile ersetzen. Der folgende Befehl tauscht das zweite Vorkommen des Wortes Linux in einer Zeile gegen Unix aus.

sed 's/Linux/Unix/2' file1.txt

Ausgabe:

Linux is a family of free and open-source operating systems based on the Unix kernel.
This is inserted text.
Operating systems based on Linux are known as Unix distributions or distros.
Examples includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Text nach einer Zeile anhängen

Der folgende Befehl ergänzt This is appended text. nach der dritten Zeile in file1.txt. Die Option -i stellt sicher, dass die Änderung gespeichert wird, und 3a\ hängt den Text nach der angegebenen dritten Zeile an.

sed -i '3a\This is appended text.' file1.txt

Ausgabe:

Linux is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Linux are known as Linux distributions or distros.
This is appended text.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Zeichenkette am Anfang einer Zeile ersetzen

Der Ausdruck ^<pattern> dient dazu, ein bestimmtes Muster am Beginn einer Zeile zu erkennen. Der folgende Befehl ersetzt Linux nur dann durch Unix, wenn Linux am Anfang der Zeile steht.

sed 's/^Linux/Unix/' file1.txt

Ausgabe:

Unix is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Linux are known as Linux distributions or distros.
This is appended text.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Zeichenkette am Ende einer Zeile ersetzen

Der folgende Befehl ersetzt distros. durch distributions, allerdings nur dann, wenn der Ausdruck am Zeilenende steht. Der Ausdruck <pattern>$ wird verwendet, um ein bestimmtes Muster am Ende einer Zeile zu erkennen.

sed 's/distros.$/distributions/' file1.txt

Ausgabe:

Linux is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Linux are known as Linux distributions or distributions.
This is appended text.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Groß- und Kleinschreibung ignorieren

Der folgende Befehl ersetzt linux durch Unix, ohne zwischen Groß- und Kleinschreibung zu unterscheiden. Das Flag I macht den Vergleich unabhängig von der Schreibweise.

sed 's/linux/Unix/I' file1.txt

Zeilen zwischen zwei Mustern extrahieren

Der folgende Befehl gibt alle Zeilen von inserted bis appended aus, einschließlich der beiden Trefferzeilen.

sed -n '/inserted/,/appended/p' file1.txt

,: Bereichsoperator, der Zeilen zwischen zwei Mustern auswählt.

p: Gibt die passenden Zeilen aus.

Zusätzlich unterdrückt die Option -n die automatische Ausgabe aller Zeilen.

Ausgabe:

This is inserted text.
Operating systems based on Linux are known as Linux distributions or distros.
This is appended text.

Mehrere Dateien verarbeiten

Der folgende Befehl ersetzt Linux sowohl in file1.txt als auch in file2.txt durch Unix und überschreibt dabei die Originaldateien.

sed -i 's/Linux/Unix/' file1.txt file2.txt

Nicht leere Zeilen formatieren und nummerieren

Der folgende Befehl versieht alle nicht leeren Zeilen in file1.txt mit Zeilennummern.

sed '/./=' file1.txt | sed 'N;s/\n/ /'

/./=: Erkennt nicht leere Zeilen und gibt ihre Nummern aus.

N: Hängt die nächste Zeile an den Pattern Space an.

s/\n/ /: Ersetzt den Zeilenumbruch durch ein Leerzeichen.

Ausgabe:

1 Linux is a family of free and open-source operating systems based on the Linux kernel.
2 This is inserted text.
3 Operating systems based on Linux are known as Linux distributions or distros.
4 This is appended text.
5 Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Eine Zeichenkette in einer bestimmten Zeile ersetzen

Der sed-Befehl kann so eingeschränkt werden, dass eine Ersetzung nur in einer bestimmten Zeile erfolgt. Im folgenden Beispiel wird distros ausschließlich in der dritten Zeile durch distributions ersetzt.

sed '3 s/distros/distributions/' file1.txt

Ausgabe:

Linux is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Linux are known as Linux distributions or distributions.
This is appended text.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Eine Zeichenkette in einem Zeilenbereich ersetzen

Es ist ebenfalls möglich, einen Zeilenbereich an sed zu übergeben, um Ersetzungen gezielt nur innerhalb dieses Abschnitts vorzunehmen. Der folgende Befehl ersetzt zwischen Zeile 1 und 3 jeweils nur das erste Vorkommen von Linux durch Unix.

sed '1,3 s/Linux/Unix/' file1.txt

Ausgabe:

Unix is a family of free and open-source operating systems based on the Linux kernel.
This is inserted text.
Operating systems based on Unix are known as Linux distributions or distros.
This is appended text.
Example includes Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.

Leistungsaspekte bei großen Dateien

Die Arbeit mit großen Dateien in sed kann ressourcenintensiv werden, besonders wenn viele Operationen ausgeführt werden oder sehr große Datenmengen verarbeitet werden. Die folgenden Hinweise helfen dabei, die Leistung zu verbessern und sed effizient einzusetzen.

  1. Mit -n unnötige Ausgabe vermeiden – Die Option -n deaktiviert die automatische Ausgabe jeder Zeile und sorgt dafür, dass nur die gewünschte Ausgabe erscheint. Das reduziert den Overhead bei der Arbeit mit großen Dateien.Beispiel:
    
    
    sed -n '/pattern/p' largefile.txt

  2. Skripte vereinfachen – Halten Sie die Anzahl der Operationen in einem einzelnen Ablauf möglichst gering. Anstatt mehrere sed-Befehle nacheinander auszuführen, können diese in einem Skript zusammengefasst werden, um wiederholtes Lesen derselben Datei zu vermeiden.Beispiel:
    
    
    sed -e 's/foo/bar/' -e '/pattern/d' largefile.txt

  3. Eingaben über Pipes verarbeiten – Werden Daten aus anderen Befehlen oder Streams verarbeitet, helfen Pipes dabei, temporäre Dateien zu vermeiden und die Festplatten-I/O zu reduzieren.Beispiel:
    
    
    cat largefile.txt | sed 's/foo/bar/' > output.txt

  4. Direkte Bearbeitung bei großen Dateien vermeiden – Statt große Dateien unmittelbar zu verändern, ist es sinnvoller, die Ausgabe zunächst in eine neue Datei zu schreiben und die Originaldatei erst nach Prüfung des Ergebnisses zu ersetzen.Beispiel:
    
    
    sed 's/old/new/' largefile.txt > temp.txt && mv temp.txt largefile.txt

  5. Alternativen vergleichen – Bei sehr großen Dateien können Werkzeuge wie awk, perl oder grep je nach Aufgabe bessere Leistung liefern.Beispiel:
    
    
    awk '{gsub(/old/, "new"); print}' largefile.txt > output.txt

Integration in Shell-Skripte

Der sed-Befehl wird häufig in Shell-Skripten verwendet, um wiederkehrende Aufgaben der Textbearbeitung zu automatisieren. Hier ein Beispiel:

#!/bin/bash

# Replace all occurrences of "foo" with "bar" in input.txt and save the result

sed 's/foo/bar/g' input.txt > output.txt

Dieses Skript liest input.txt ein und schreibt das angepasste Ergebnis in output.txt.

sed im Vergleich zu anderen Alternativen

Obwohl sed eine effiziente und schlanke Lösung für grundlegende Textverarbeitung ist, bieten modernere Alternativen wie awk und perl zusätzliche Funktionen, die für bestimmte Aufgaben besser geeignet sein können. Im Folgenden finden Sie einen Überblick über die wichtigsten Unterschiede und passende Einsatzbereiche.

Wann sed verwendet werden sollte

  • Schnelle und einfache Textersetzungen oder Löschvorgänge.
  • Zeilenbasierte Umwandlungen in Dateien.
  • Aufgaben mit möglichst geringem Skriptaufwand.

Wann awk verwendet werden sollte

  • Bei strukturierten Daten wie CSV- oder TSV-Dateien.
  • Wenn neben der Textverarbeitung auch Berechnungen durchgeführt werden sollen.
  • Wenn formatierte Berichte aus Eingabedaten erzeugt werden müssen.

Beispiel:

awk -F, '{print $1, $3}' data.csv

Dieser Befehl extrahiert das erste und dritte Feld aus einer CSV-Datei und gibt sie aus.

Wann perl verwendet werden sollte

  • Für komplexe Textmanipulationen mit fortgeschrittenen regulären Ausdrücken.
  • Wenn Textverarbeitung mit Logik oder Bedingungen kombiniert werden soll.
  • Zum Schreiben kompakter, aber leistungsfähiger Skripte.

Beispiel:

perl -pe 's/(error)/WARNING: $1/' logfile.txt

Dieser Befehl ergänzt in Zeilen, die das Wort error enthalten, das Präfix WARNING:.

Fazit

Wer den sed-Befehl beherrscht, kann Texte unter Linux deutlich effizienter verarbeiten und anpassen. Dank seiner leistungsstarken Funktionen und der einfachen Einbindung in Skripte ist er ein wichtiges Werkzeug für textbasierte Bearbeitungs- und Automatisierungsaufgaben.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: