Wer regelmäßig mit Linux arbeitet, stößt früher oder später auf den Befehl sed. Während viele Administratoren zunächst zu einem Texteditor wie Nano oder Vim greifen, spielt sed seine Stärken besonders bei der automatisierten Verarbeitung von Dateien, Skripten und Logdateien aus.
Mit sed lassen sich Texte suchen, ersetzen, löschen, einfügen oder verändern – direkt auf der Kommandozeile und ohne die Datei manuell zu öffnen. Dadurch gehört sed zu den wichtigsten Werkzeugen für Administratoren, DevOps-Engineers und Entwickler.
In diesem Beitrag schauen wir uns den Linux-Befehl ausführlich an – von den Grundlagen bis hin zu praktischen Beispielen für den Alltag.
Was ist sed?
Der Name sed steht für:
Stream EDitor
Anders als klassische Texteditoren arbeitet sed zeilenweise auf einem Datenstrom (Stream).
Das bedeutet:
- Dateien werden nicht interaktiv geöffnet
- Zeilen werden nacheinander verarbeitet
- Änderungen können direkt ausgegeben oder gespeichert werden
- Ideal für Skripte und Automatisierungen
Typische Anwendungsfälle:
- Konfigurationsdateien anpassen
- Massenhafte Textersetzungen
- Logdateien analysieren
- Daten für andere Programme aufbereiten
- Automatisierte Deployments
Grundlegende Syntax
Die allgemeine Syntax lautet:
sed [OPTIONEN] 'BEFEHL' DATEI
Beispiel:
sed 's/Hallo/Hi/' datei.txt
Ausgabe:
Hi Welt
Die Originaldatei bleibt dabei unverändert.
Die wichtigste Funktion: Suchen und Ersetzen
Die am häufigsten verwendete Funktion ist:
s/alt/neu/
Dabei bedeutet:
s= substitute (ersetzen)alt= Suchbegriffneu= Ersatztext
Beispiel:
Datei:
Linux ist toll.
Befehl:
sed 's/Linux/Debian/' datei.txt
Ergebnis:
Debian ist toll.
Alle Treffer einer Zeile ersetzen
Standardmäßig ersetzt sed nur den ersten Treffer pro Zeile.
Beispiel:
Linux Linux Linux sed 's/Linux/Debian/' datei.txt
Ergebnis:
Debian Linux Linux
Mit dem Flag g (global):
sed 's/Linux/Debian/g' datei.txt
Ergebnis:
Debian Debian Debian
Groß- und Kleinschreibung ignorieren
Mit dem Flag I:
sed 's/linux/Debian/I' datei.txt
Treffer:
linux Linux LINUX LiNuX
werden gleichermaßen ersetzt.
Änderungen direkt in der Datei speichern
Normalerweise schreibt sed nur auf die Standardausgabe.
Mit -i erfolgt die Änderung direkt in der Datei:
sed -i 's/Linux/Debian/g' datei.txt
Nun wird die Datei tatsächlich verändert.
Sicherheitskopie erstellen
Besonders sinnvoll:
sed -i.bak 's/Linux/Debian/g' datei.txt
Dadurch entstehen:
datei.txt datei.txt.bak
Falls etwas schiefgeht, kann die Sicherung wiederhergestellt werden.
Zeilen löschen
Eine bestimmte Zeile löschen
sed '5d' datei.txt
Löscht Zeile 5.
Mehrere Zeilen löschen
sed '5,10d' datei.txt
Löscht Zeile 5 bis 10.
Leere Zeilen entfernen
sed '/^$/d' datei.txt
Sehr praktisch beim Bereinigen von Dateien.
Zeilen anzeigen
Nur eine bestimmte Zeile
sed -n '10p' datei.txt
Zeigt nur Zeile 10 an.
Zeilenbereich anzeigen
sed -n '10,20p' datei.txt
Zeigt Zeile 10 bis 20.
Zeilen einfügen
Vor einer Zeile:
sed '/BEGINN/i Neue Zeile' datei.txt
Nach einer Zeile:
sed '/BEGINN/a Neue Zeile' datei.txt
Ganze Zeilen ersetzen
Beispiel:
Datei:
ServerName localhost
Befehl:
sed 's/^ServerName.*/ServerName example.com/'
Ergebnis:
ServerName example.com
Ein häufiger Anwendungsfall bei Apache-Konfigurationen.
Kommentare entfernen
Viele Konfigurationsdateien enthalten Kommentare.
Beispiel:
sed '/^#/d' datei.conf
Entfernt alle Kommentarzeilen.
Leere und kommentierte Zeilen gleichzeitig entfernen
sed '/^#/d;/^$/d' datei.conf
Sehr hilfreich beim Analysieren von Konfigurationsdateien.
Reguläre Ausdrücke mit sed
sed unterstützt reguläre Ausdrücke.
Alle Zahlen ersetzen
sed 's/[0-9]/X/g'
Beispiel:
Server123
wird zu:
ServerXXX
Nur Buchstaben ersetzen
sed 's/[A-Za-z]/X/g'
IP-Adressen maskieren
sed 's/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/XXX.XXX.XXX.XXX/g'
Praktisch für Logdateien.
Apache-Konfiguration automatisch ändern
Vorher:
Listen 80
Ändern auf:
sed -i 's/^Listen 80/Listen 8080/' /etc/apache2/ports.conf
SSH-Port automatisch ändern
Vorher:
#Port 22
Befehl:
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
Danach:
sudo systemctl restart ssh
Mehrere Ersetzungen gleichzeitig
sed -e 's/Linux/Debian/g' \
-e 's/Ubuntu/Debian/g' \
datei.txt
sed in Pipes verwenden
Einer der größten Vorteile.
Speicherverbrauch anzeigen
free -h | sed -n '2p'
Prozesse filtern
ps aux | sed -n '1,10p'
Variablen in Shell-Skripten verwenden
HOSTNAME="server01" sed "s/HOSTNAME/$HOSTNAME/g" template.conf
Template:
Server = HOSTNAME
Ergebnis:
Server = server01
Praktischer Einsatz im Serverbetrieb
Typische Aufgaben:
Apache-Konfiguration anpassen
sed -i 's/example.com/meinedomain.de/g' vhost.conf
SSL aktivieren
sed -i 's/SSL=0/SSL=1/' config.conf
Datenbankzugänge ändern
sed -i 's/dbuser=root/dbuser=admin/'
Reverse-Proxy konfigurieren
sed -i 's/PORT=80/PORT=8080/'
GNU sed vs. BSD sed
Linux-Systeme verwenden meist:
GNU sed
Auf macOS wird standardmäßig:
BSD sed
verwendet.
Daher funktionieren manche Optionen unterschiedlich.
Beispiel:
Linux:
sed -i 's/a/b/g' datei.txt
macOS:
sed -i '' 's/a/b/g' datei.txt
Häufige Fehler
Datei versehentlich überschrieben
Deshalb besser:
sed -i.bak
verwenden.
Reguläre Ausdrücke falsch escaped
Statt:
sed 's/./X/g'
muss häufig:
sed 's/\./X/g'
verwendet werden.
Falsche Anführungszeichen
Variablen:
sed "s/$ALT/$NEU/g"
Keine Variablen:
sed 's/alt/neu/g'
sed gehört zu den mächtigsten Standardwerkzeugen unter Linux. Obwohl die Syntax anfangs etwas gewöhnungsbedürftig wirkt, spart der Befehl im Alltag enorm viel Zeit. Besonders bei der automatisierten Bearbeitung von Konfigurationsdateien, Logdateien und Textdaten ist sed oft die schnellste und eleganteste Lösung.
Wer Linux-Server administriert, Shell-Skripte schreibt oder wiederkehrende Aufgaben automatisieren möchte, sollte die wichtigsten sed-Funktionen unbedingt beherrschen. Schon einfache Ersetzungen mit sed -i können viele manuelle Arbeitsschritte ersparen und machen Installations- sowie Wartungsskripte deutlich flexibler und professioneller.