Privacy Policy Cookie Policy Terms and Conditions Sed (Unix) - Wikipedia

Sed (Unix)

aus Wikipedia, der freien Enzyklopädie

Der korrekte Titel dieses Artikels lautet „sed“. Diese Schreibweise ist aufgrund technischer Einschränkungen derzeit nicht möglich.

sed steht für Stream EDitor und ist ein bekanntes Unix-Werkzeug, mit dem Texte geändert werden können. sed ermöglicht die automatisierte Manipulation per Kommandozeile – im Gegensatz etwa zu einem interaktiven Texteditor wie dem vi.

Die sed-Befehle orientieren sich teilweise an denen des zeilenorientierten Texteditors ed.

Inhaltsverzeichnis

[Bearbeiten] Arbeitsweise

sed liest eine Eingabedatei oder einen Textstrom (Stream) Zeile für Zeile und gibt jede Zeile entsprechend vorgegebener Regeln verändert wieder als Stream aus. Die Ausgabe kann dann wiederum in eine Datei geschrieben werden.

Um die Ausgabe eines anderen Programms an sed umzuleiten und diese manipulieren zu lassen, bedient man sich sogenannter Pipes. Am häufigsten werden jedoch die Inhalte von Textdateien manipuliert. Diese werden sed einfach als Parameter übergeben, siehe dazu die folgenden Beispiele.

[Bearbeiten] Typische Anwendungsbeispiele

Eine typische Anwendung ist das Ersetzen von Ausdrücken:

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

Die Veränderungsregel 's/alt/neu/g' besagt, dass in jeder Zeile der Eingabedatei die Vorkommen des Regulären Ausdrucks 'alt' durch die Zeichenfolge 'neu' zu ersetzen ist.
Das führende 's' ist ein sed-Befehl. Er 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 jeder Zeile, vorgenommen werden soll.

Durch den Operator > wird die Ausgabe des Programms, die normalerweise auf den Standard Output Stream (Stdout) erfolgt, in eine Datei geschrieben. Dies erfolgt nicht durch sed selbst, sondern durch den Kommandozeileninterpreter; diese Operation ist prinzipiell bei jedem Programm möglich, das auf Stdout Daten ausgibt.

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

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

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 '/' in folgendem Beispiel mit einem anderen Sonderzeichen:

sed 's!/tmp/!!'

ersetzt alle Vorkommen von '/tmp/' durch nichts (löscht diese also aus dem Text), daher die zwei '!' direkt nebeneinander.

Obwohl der 's'-Befehl der meistbenutzte Befehl ist, gibt es weitere nützliche Befehle. So gibt es den Befehl 'd', der eine Zeile löscht. Durch

sed 'd' Eingabedatei >Ausgabedatei

würde allerdings immer eine leere Ausgabedatei entstehen. Das wäre recht sinnlos. Man kann deshalb allgemein Befehle nur auf solche Zeilen anzuwenden, die einen bestimmten Text enthalten.

sed '/fehler/d' Eingabedatei >Ausgabedatei

Hier werden alle Zeilen, die den Text zwischen den Schrägstrichen enthalten (im Beispiel fehler) entfernt.

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

sed -n '/einMuster/p' Eingabedatei

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 höchstens Leerzeichen beinhalten:

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

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

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.

[Bearbeiten] Exotische Beispiele

Weiter kann man die Regeln durch eine einfache Skriptsprache auch zu größeren Programmen zusammenfassen. Seds Programmiersprache kennt zwar keine Variablen und hat nur einfache Vergleichsmöglichkeiten und einen Goto-Befehl; sie ist aber trotzdem turing-äquivalent. "Beweisen" kann man die Turing-Äquivalenz beispielsweise, indem man eine Turing-Maschine mittels sed "baut" [1] oder indem man mit sed einen Interpreter für eine andere, turing-vollständige Sprache schreibt [2].

Trotz der eingeschränkten Möglichkeiten wurden sogar Spiele wie sokoban oder arkanoid und andere anspruchsvolle Programme wie debugger mit sed geschrieben. [3]

Für komplexere Aufgaben werden gewöhnlich awk oder Perl benutzt.

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

[Bearbeiten] Weblinks

[Bearbeiten] Quellen

  1. TUBA Freiberg: Turing sed
  2. Brainfuck mit sed [1] (engl.)
  3. Liste verschiedener sed-Skripte (engl.)

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -