sed

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Aufruf von sed
    1. Parameter
  3. Anwendungsbeispiele
    1. Ersetzen von Text in einer Datei
    2. Entfernen von Zeilen
    3. Zeilen einfügen
    4. Reguläre Ausdrücke
    5. Bearbeiten von Dateinamen
    6. Direktes Bearbeiten einer Datei
  4. Links

Wiki/Icons/terminal.png sed (von stream editor) ist ein nicht-interaktiver Texteditor für die Verwendung auf der Kommandozeile oder in Skripten. sed zählt zu den "Urgesteinen" in der Unix- / Linux-Welt und ist quasi in jeder Linux-Installation (auch Minimalinstallationen) enthalten.

Verwandte Befehle sind:

Installation

Das Programm sed ist im essentiellen Paket

von Ubuntu enthalten und ist deshalb auf jedem System installiert.

Aufruf von sed

sed [Optionen] sed-Skript [Textdatei...] 

oder

sed [Optionen] [-e sed-Skript | -f Skriptdatei] [Textdatei...] 

Das Ergebnis wird auf der Standardausgabe ausgegeben. Wird keine Datei angegeben, so wird die Standardeingabe verwendet. Die Syntax von sed-Skripten findet man in der info-Seite von sed oder über die Links am Ende des Artikels. sed-Skripte verwenden reguläre Ausdrücke ähnlich denen von grep. Es ist empfehlenswert, sed-Skripte durch Hochkommas (') zu schützen, damit die Shell Sonderzeichen nicht selbst auswertet.

Parameter

Diese Parameterliste ist unvollständig. Weiteres findet sich auf der man- oder info-Seite von sed.

Kurzform Langform Beschreibung
-n --quiet, --silent Verhindert das automatische Ausgeben des Ergebnisses. Ausgaben erfolgen nur über das Kommando p.
-e Skript --expression=Skript Angeben eines sed-Skriptes, mehrere sed-Skripte sind möglich. Bei nur einem sed-Skript kann -e weggelassen werden.
-f Skriptdatei --file=Skriptdatei Das sed-Skript steht in der Skriptdatei, nicht auf der Kommandozeile.
-i --in-place Die Textdatei wird verändert, anstatt das Ergebnis auf Standardausgabe auszugeben.

Achtung!

Bei der Verwendung des Parameters -i sollte man wissen, dass das Überschreiben der gewählten Dateien durch Entzug von Schreibrechten nicht verhindert wird.

Wenn man also Platzhalter verwendet und sichergehen will, dass schreibgeschützte Dateien nicht verändert werden, dann sollte man diesen Parameter in Kombination mit test in einer for-Schleife verwenden:

1
2
3
for x in *.sh; do
    [ -w $x ] && sed -i 's/Suchmuster/Ersetzungsmuster/' $x
done

Anwendungsbeispiele

Ersetzen von Text in einer Datei

Entfernen von Zeilen

sed '/^#/d' Textdatei 

Zeilen die mit # anfangen, werden entfernt.

Zeilen einfügen

Reguläre Ausdrücke

sed 's/^E-Mail:.*$/E-Mail-Adresse ist privat/' Textdatei 

Alle Zeilen, die mit "E-Mail:" anfangen, werden ersetzt.

Bearbeiten von Dateinamen

sed 's!/home/anton/!/home/berta/!' Textdatei 

Normalerweise wird "/" als Trennzeichen verwendet. Es lässt sich aber beliebig austauschen, was beim Bearbeiten von Dateinamen nützlich ist.

Direktes Bearbeiten einer Datei