Sed

left|25px|Begriffsklärung Dieser Artikel beschreibt das Computerprogramm sed, für die Sozialistische Einheitspartei Deutschlands (SED) siehe ebendort
Der korrekte Titel dieses Artikels lautet „sed“. Leider ist dieser Titel in der Wikipedia aufgrund technischer Einschränkungen nicht möglich. Sed


sed ist ein Computerprogramm. Es wurde bekannt als Unix-Werkzeug, mit dem Textdateien geändert werden können. sed ist ein nicht-interaktiver Editor, der die Bearbeitung von Textdateien von der Kommandozeile aus ermöglicht. "sed" steht für "Stream EDitor".

Die sed-Befehle orientieren sich teilweise an denen des zeilenorientierten Texteditors ed. Sed liest eine Eingabedatei Zeile für Zeile, und gibt jede Zeile entsprechend vorgegebener Regeln verändert wieder aus.

Typische Anwendungsbeispiele

Eine typische Anwendung ist das Ersetzen von Ausdrücken:

sed -e 's/alt/neu/g' Eingabedatei > Ausgabedatei
 

In diesem Beispiel ist durch das '-e' angedeutet, dass der nachfolgende Text die Veränderungsregel angibt. Die Veränderungsregel 's/alt/neu/g' besagt, dass in jeder Zeile der Eingabedatei die Zeichenfolge 'alt' durch die Zeichenfolge 'neu' zu ersetzen ist. Das führende 's' bedeutet, dass eine Zeichen-Ersetzung (substitution) stattfinden soll. Das 'g' am Ende gibt vor, dass die Veränderung global, d.h. für alle Vorkommen in der Zeile, vorgenommen werden soll.

Auch das Ersetzen von mehrfachen Leerzeichen durch ein einziges ist möglich:

sed -e 's/ \+/ /g' Eingabedatei > Ausgabedatei 
 

Der Trick daran ist, dass die gesuchte Zeichenfolge nicht immer 1:1 übernommen wird, sondern vielmehr einen Regulären Ausdruck darstellt. In diesem Falle steht das '\+' für ein- oder mehrmals das vorherige Zeichen, womit nicht nur ein Leerzeichen, sondern auch mehrere hintereinander ersetzt werden.

Falls in der alten oder der neuen Zeichenfolge bereits ein '/' vorkommt, behilft man sich statt des '/' im obigen Beispiel mit einem anderen Sonderzeichen:

sed -e 's!/tmp/!!'
 

ersetzt alle Vorkommen von '/tmp/' durch - nichts, daher die zwei '!' direkt nebeneinander.

Man kann sed auch (anstatt grep) dazu benutzen, um alle Zeilen einer Datei auszudrucken, die einem bestimmten Muster entsprechen:

sed -n -e '/einMuster/p' eingabeDateiName
 

Die Option '-n' gibt dabei an, dass sed nichts ausgeben soll, wenn es nicht durch den 'p'-Befehl explizit gefordert wird. Ohne diese kopiert sed automatisch jede Zeile der Eingabedatei in die Ausgabedatei.

Löschen aller Zeilen, die leer sind:

sed -e '/^ *$/d' Eingabedatei > Ausgabedatei
 

Der Befehl d bedeutet, dass die betreffende Zeile gelöscht werden soll, ^ steht für den Zeilenanfang, $ für das Zeilenende. Die Lehrstelle und der darauffolgende Asterisk (*) bedeuten beliebig viele (auch kein) Lehrzeichen.

Das Ergebnis kann auch wieder in die Eingabedatei geschrieben werden:

sed -i -e '/^ *$/d' Eingabedatei
 

Wird ein backup gewünscht, kann an die Option -i direkt ein suffix für die backup-Datei angehängt werden:

sed -i.BACKUP -e '/^ *$/d' Eingabedatei
 

Diese Beispiele zeigen einen typischen Einsatzbereich von sed: Einfache Aufgaben, die durch kurze Regeln beschreibbar sind. Diese Regeln erlauben weiterhin den Einsatz Regulärer Ausdrücke, die (u.a.) durch sed bekannt geworden sind.

Weiter kann man die Regeln durch eine einfache Skriptsprache auch zu größeren Programmen zusammenfassen. Sed's Programmiersprache kennt zwar keine Variabeln und hat nur einfache Vergleichsmöglichkeiten und einen Goto-Befehl; sie ist aber trotzdem turing-äquivalent. Trotz der eingeschränkten Möglichkeiten wurden sogar Spiele wie sokoban oder arkanoid und andere anspruchsvolle Programme wie debugger mit sed geschrieben. [1]

Für komplexere Aufgaben werden gewöhnlich awk oder Perl, oft in Kombination mit anderen Programmierwerkzeugen, benutzt.

Das GNU-Projekt macht eine Version von sed als Freie Software auf jedem Betriebssystem verfügbar, das über einen C-Compiler verfügt.

Weblinks

See also: Sed, Arkanoid, Awk, Computerprogramm, Debugger, Ed, Freie Software, GNU-Projekt