Dieses Dokument steht unter der Creative Commons Attribution-Share Alike 3.0 Unported Lizenz.
v1.5, November 2008
Zusammenfassung
Seit ich mir ein bisschen Zeit genommen habe mich in sed einzuarbeiten, hat dieses Tool mir sehr viele Aufgaben erleichtert. Es ist unglaublich, wie flexibel dieses Programm einsetzbar ist und welche komplexen Regeln man mit ein paar Zeichenkombinationen aufstellen kann, die für den Laien nur wie ein beliebiges Gekrösel von Hieroglyphen ausschauen. Außerdem macht es einfach Spaß, eigene Scripte zu erstellen oder die von anderen Leuten zu verstehen. Mit dieser Einführung will ich Lust auf sed machen und ich hoffe dass die Einarbeitung in das Programm nicht zur Frust ausartet.
Inhaltsverzeichnis
Ich bin kein sed-Guru, deshalb könnte manches Problem sicher mit weniger Kommandos gelöst werden. Das ist aber nicht der Sinn dieser Einführung die versucht die Beispiele so nachvollziehbar wie nur möglich zu halten. Ich bin aber dankbar für jedes Feedback, für Anregungen, Kritik, Fehlermeldungen, Verbesserungsvorschläge und Blankoschecks.
Die hier vorgestellten Scripte wurden in der Regel getestet, doch kann ich nicht ausschließen, dass sich nicht doch hie und da einige Fehler eingeschlichen haben. In diesem Fall bitte nicht meckern sondern melden. Für Fragen stehe ich gerne zur Verfügung. Einfach eine e-Mail an die auf der ersten Seite angegebene Adresse schicken und in der Betreff-Zeile 'sed-tutorium' unterbringen.
Neue Versionen dieses Dokumentes können von www.tty1.net/sed-tutorium_de.html bezogen werden.
sed wurde 1973 oder 1974 von Lee E. McMahon geschrieben
(mehr zur Geschichte der frühen UNIX-Kommandos
auf http://www.columbia.edu/~rh120/ch106.x09).
Der Name sed steht für Stream EDitor, was andeuten soll, dass das Programm kein Editor
im gewöhnlichen Sinn ist, sondern Zeile für Zeile von stdin
(standard input, meistens die Konsole) in seinen pattern space liest, diesen
nach bestimmten Regeln bearbeitet, und anschließend den bearbeiteten
pattern space auf stdout (standard output, meistens der Bildschirm), ausgibt.
Die Quelldatei bleibt dabei unverändert.
Zur Verdeutlichung der Arbeitsweise von sed hier ein kleines Beispiel:
sed -e '/root/d'
Von auf der Tastatur eingegebenen Zeilen werden jene weggefiltert, die den String 'root' enthalten.
Das wurde so im Script '/root/d' angegeben.
Zum Beenden des Programms drückt man ^D (CTRL und D)
was unter UNIX für Dateiende steht.
Trotz seines Alters wird sed immer noch verwendet, da es ein weites Spektrum von einfachen bis sehr komplexen Aufgaben erledigen kann. Die Stärke von UNIX liegt zum Teil auch darin, dass es über kleine hochspezialisierte Tools verfügt die, miteinander kombiniert, fast jede Aufgabe lösen können.
Bedingt durch die weite Verbreitung von sed gibt es eine Reihe von Implementationen, die sich in einigen Details unterscheiden. Dieses Tutorium versucht, sich so weit als möglich an die standardisierte Version von sed zu halten. Dem Autor liegt GNU sed vor, und alle Beispiele wurden damit getestet. Im Text wird aber jeweils darauf hingewiesen, wenn Erweiterungen verwendet werden. Auf Pements sedfaq findet sich eine erschöpfende Liste der verschiedenen sed-Implementationen und deren Unterschiede.
Eine gute Hersteller-unabhängige Dokumentation stellt die Open Group bereit.
Zu nennen ist natürlich die man-page zu sed, die aber eher für schon sattelfeste Benutzer verdaulich ist. Ausführlicher und systematischer ist die info page zu sed. Damit sollte man nach der Lektüre dieser Einführung keine Probleme mehr haben.
Eine Sammlung interessanter Fragen rund um sed, inklusive vieler Scripte sowie eine nicht enden wollende Liste von weiterführenden Links findet man auf der sedfaq von Eric Pement. Das Tutorial von Carlos Jorge Duarte (do it with sed) ist sehr lesenswert, besonders wegen der vielen sehr gut dokumentierten und zum Teil trickreichen Scripte. Wer keine Dokumentation zu sed hat, findet in dem File eine kurze aber durchaus brauchbare Referenz. Sehr gut ist auch u-sedit von Mike Arst, welches ein Tutorial und jede Menge Beispiele beinhaltet.
Spezifische Fragen (sofern nicht in den FAQs behandelt) kann man auch in den dafür zuständigen Newsgroups stellen. Man bekommt dort meistens eine fundierte und ausführliche Antwort - eine treffende Beschreibung des Problems und die Befolgung der jeweiligen Netiquette seitens des Fragenden vorausgesetzt. Eine zuständige deutschsprachige Newsgruppe könnte beispielsweise de.comp.os.unix.shell sein.