Sed (Unix)

Sed (Unix)

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

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.

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 (das erste Zeichen nach s wird als Trennzeichen definiert, gemäß 's!alt!neu!g'):

sed 's!/tmp/!!g'

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 anwenden, 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 (in diesem Fall, da nicht explizit eine Datei angegeben wurde, das aktuelle Terminal).

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.

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 eine Sprunganweisung, ist aber trotzdem turing-äquivalent. „Beweisen“ kann man die Turing-Äquivalenz, 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.

Einzelnachweise

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

Weblinks


Wikimedia Foundation.

См. также в других словарях:

  • sed (Unix) — sed steht für Stream EDitor und ist ein Unix Werkzeug, mit dem Texte geändert werden können. Es ermöglicht die automatisierte Manipulation per Kommandozeile – im Gegensatz etwa zu einem interaktiven Texteditor wie dem vi. Die sed Befehle… …   Deutsch Wikipedia

  • UNIX-Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Befehle — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Kommando — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Sed — steht für: Sozialistische Einheitspartei Deutschlands, die Staatspartei der DDR Surface conduction Electron emitter Display, eine Bildschirmtechnologie Schweizerischer Erdbebendienst Saturn s Electrostatic Discharges Surface engineered Silica,… …   Deutsch Wikipedia

  • SED (Begriffsklärung) — SED steht für: Sozialistische Einheitspartei Deutschlands, die Staatspartei der DDR Sozialistische Einheitspartei Westberlins, die sich von 1962 bis 1969 SED Westberlin nannte Surface conduction Electron emitter Display, eine… …   Deutsch Wikipedia

  • Sed — (Stream EDitor) refers to a Unix utility which (a) parses text files and (b) implements a programming language which can apply textual transformations to such files. It reads input files line by line (sequentially), applying the operation which… …   Wikipedia

  • sed — (от англ. Stream EDitor)  потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных. Первоначально был написан как UNIX… …   Википедия

  • Sed — (от англ. Stream EDitor)  потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных. Первоначально был написан как UNIX утилита… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»