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
- sed at sourceforge
- seder's grab bag
- GNU sed
- Kurzanleitung
- GNU-Anleitung (englisch)
- deutschsprachiges Sed Tutorial (GNU-FDL)
- FAQ - Eine Sammlung interessanter Fragen rundum sed, inklusive vieler Skripte findet man in der sedfaq von Eric Pement. (englisch)
- Eine Sammlung von Unix-Tools für Windows. Enthält unter anderem sed
