Sed: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
T-m (Diskussion | Beiträge)
KKeine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Editoren]]
{{SEITENTITEL:sed}}
 
sed (''stream editor'') ist ein ''nicht interaktiver'' Texteditor oder anders ausgedrückt: ein steuerbarer Filter.
Sed (''stream editor'') ist ein ''nicht interaktiver'' Texteditor oder anders ausgrdückt ein steuerbares Filter.


==Konzept==
==Konzept==
Das Konzept hinter sed ist, Text von der Standardeingabe mit Hilfe variabler Regeln (vor allem unter Benutzung regulärer Ausdrücke) in modifizierten Text auf der Standardausgabe zu überführen. Man kann mit sed Text säubern, extrahieren, zurechtschneiden, erweitern, vertauschen und all diese Prozesse automatisieren. Sed eignet sich immer dann, wenn Textbearbeitungen wiederholt ablaufen müssen.
Das Konzept hinter sed ist, Text von der Standardeingabe mit Hilfe variabler Regeln (vor allem unter Benutzung regulärer Ausdrücke) in modifizierten Text auf der Standardausgabe zu überführen. Man kann mit sed Text säubern, extrahieren, zurechtschneiden, erweitern, vertauschen und all diese Prozesse automatisieren. sed eignet sich immer dann, wenn Textbearbeitungen wiederholt ablaufen müssen.


Sed überschneidet sich in einigen Aspekten mit [[awk]] und mit [[perl]]. Im Gegensatz zu perl besitzt sed keine wirklichen Variablen und Steueranweisungen. Man wird keine Programme für sed schreiben, die diesen Namen wert sind. Aus diesem Grunde ist sed aber auch weit weniger komplex. Man hat üblicherweise in ein paar Minuten brauchbare Ergebnisse.
sed überschneidet sich in einigen Aspekten mit [[awk]] und mit perl. Im Gegensatz zu perl besitzt sed keine wirklichen Variablen und Steueranweisungen. Man wird keine Programme für sed schreiben, die diesen Namen wert sind. Aus diesem Grunde ist sed aber auch weit weniger komplex. Man hat üblicherweise in ein paar Minuten brauchbare Ergebnisse.


Viele sed-Kommandos kann man zudem auch in [[vi]] oder [[ed]] interaktiv verwenden, was ihm eine steile Lernkurve beschert. Wer vi mit regulären Ausdrücken beherrscht, beherrscht im Prinzip auch sed.
Viele sed-Kommandos kann man zudem auch in [[vi]] oder [[ed]] interaktiv verwenden, was ihm eine steile Lernkurve beschert. Wer vi mit regulären Ausdrücken beherrscht, beherrscht im Prinzip auch sed.


==Installation==
{{installation|repo=core|paket=sed}}
Sed wird wie folgt installiert:
pacman -Sy sed
Danach ist er sofort voll funktionsfähig.


==Bedienung==
==Bedienung==
Man startet sed üblicherweise mit Ein- und Ausgabeumleitung:
Man startet sed üblicherweise mit Ein- und Ausgabeumleitung:
  sed -e "..."  < Eingabedatei > Ausgabedabei
  sed -e "..."  < Eingabedatei > Ausgabedatei
  sed -f script < Eingabedatei > Ausgabedatei
  sed -f script < Eingabedatei > Ausgabedatei
Die erste Variante führt einen einzelnen Ausdruck aus, den man hinter -e angibt. In vielen Fällen mag dies ausreichend sein. Wird der Ausdruck komplizierter, oder will man mehrzeilige oder mehrere Ausdrücke verwenden, so schreibt man diese üblicherweise in eine einfache Textdatei und übergibt sed diese Textdatei hinter -f. Sed führt dann nacheinander Zeile für Zeile aus und wendet Ausdruck für Ausdruck auf die Eingabedaten an.
Die erste Variante führt einen einzelnen Ausdruck aus, den man hinter -e angibt. In vielen Fällen mag dies ausreichend sein. Wird der Ausdruck komplizierter, oder will man mehrzeilige oder mehrere Ausdrücke verwenden, so schreibt man diese üblicherweise in eine einfache Textdatei und übergibt sed diese Textdatei hinter -f. sed führt dann nacheinander Zeile für Zeile aus und wendet Ausdruck für Ausdruck auf die Eingabedaten an.


Man prüfe sed beispielsweise durch folgenden Aufruf
Die Standardeingabe funktioniert selbstverständlich auch interaktiv. Man prüfe sed beispielsweise durch folgenden Aufruf
  sed -e"s/ein/kein/"
  sed -e "s/ein/kein/g"
und schreibe dann einen Text mit dem Wort "ein"
und schreibe dann einen Text mit dem Wort "ein"
  Dies ist '''ein''' schöner Text. [Enter]
  Dies ist '''ein''' schönes B'''ein'''. [Enter]
Sed antwortet umgehend mit der transformierten Zeile
sed antwortet umgehend mit der transformierten Zeile
  Dies ist '''kein''' schöner Text.
  Dies ist '''kein''' schönes B'''kein'''.
und wartet auf weitere Eingaben. Man beendet einen solcherart interaktiv gestarteten sed am besten mit Ctrl-C.
und wartet auf weitere Eingaben. (Der aufmerksame Leser bemerkt gleich eine kleine Schwierigkeit ...) Man beendet einen solcherart interaktiv gestarteten sed am besten mit Ctrl-C.


Hinweis: wenn man sed irrtümlich ohne Parameter startet, so wartet er auf Text - er liest von der Standardeingabe und gibt wahrscheinlich jedes eingegebene Zeichen unverändert auf dem Bildschirm aus, denn man hat ja auch keinen Ausdruck angegeben, mit dem der Text bearbeitet werden soll. (GNU sed erkennt diesen Fall und beendet sich gleich selbst.)
'''Achtung''': es führt wahrscheinlich zu einem sehr ärgerlichen Fehler, wenn man versucht, ein und dieselbe Datei als Ein- und Ausgabe zu verwenden. Diese wird dabei zerstört! Soll eine Datei umgewandelt werden und dabei ihren Namen behalten, so ist dies nur über den Umweg einer temporären Datei möglich:
sed -f script < file > tmp
mv -f tmp file


==Einsatzfälle==
==Einsatzfälle==
Typische Einsatzfälle liegen in der '''Bearbeitung großer Textdateien''', vor allem '''Log-Dateien'''. So läßt sich eine megabytegroße Log-Datei innerhalb von einer Sekunde auf ein paar Kilobyte zurechtschneiden, die nur noch die Zeilen eines bestimmten Tages oder TRACE-Zeilen einer bestimmten Funktion enthält.
Typische Einsatzfälle liegen in der '''Bearbeitung großer Textdateien''', vor allem '''Log-Dateien'''. So lässt sich eine megabytegroße Log-Datei innerhalb von einer Sekunde auf ein paar Kilobyte zurechtschneiden, die nur noch die Zeilen eines bestimmten Tages oder TRACE-Zeilen einer bestimmten Funktion enthält.
 
Ein weiterer Fall ist die '''Nachbearbeitung von generierten Quelldateien''', z.B. solcher von ''flex'', ''bison'' oder ''gSOAP''. Gelegentlich muss man ein #include hinzufügen oder ein #ifdef. sed erledigt das vollautomatisch und immer wieder in der gleichen Qualität sofort im Anschluss an die Generierung.


Ein weiterer Fall ist die '''Nachbearbeitung von generierten Quelldateien''', z.B. solcher von [[flex]], [[bison]] oder [[gSOAP]]. Gelegentlich muß man ein #include hinzufügen oder ein #ifdef. Sed erledigt das vollautomatisch und immer wieder in der gleichen Qualität sofort im Anschluß an die Generierung.
'''Einfache Konvertierungen'''. Obwohl heute für viele Dinge auch echte Konvertierprogramme existieren, beispielsweise {{ic|iconv}} für Zeichensätze, kann man einfache Transformationen auch mit sed ausführen, beispielsweise DOS/UNIX-Zeilenenden ineinander umwandeln oder (und da wird's gleich interessant) eine Datumsschreibweise in eine andere.


'''Einfache Konvertierungen'''. Obwohl heute für viele Dinge auch echte Konvertierprogramme existieren, beispielsweise [[iconv]] für Zeichensätze, kann man einfache Transformationen auch mit sed ausführen, beispielsweise DOS/UNIX-Zeilenenden ineinander umwandeln oder (und da wird's gleich interessant) eine Datumsschreibweise in eine andere.
==Weblinks==
* {{wikipedia|sed_(Unix)}}
* [http://www.grymoire.com/Unix/Sed.html Tutorial] {{sprache|en}}


==Links==
[[Kategorie:Editoren]]
* Wikipedia [http://de.wikipedia.org/wiki/Sed_%28Unix%29]
[[Kategorie:Grundlagen]]
* Tutorial [http://www.grymoire.com/Unix/Sed.html]
[[Kategorie:Befehle]]

Aktuelle Version vom 4. Januar 2022, 09:57 Uhr

sed (stream editor) ist ein nicht interaktiver Texteditor oder anders ausgedrückt: ein steuerbarer Filter.

Konzept

Das Konzept hinter sed ist, Text von der Standardeingabe mit Hilfe variabler Regeln (vor allem unter Benutzung regulärer Ausdrücke) in modifizierten Text auf der Standardausgabe zu überführen. Man kann mit sed Text säubern, extrahieren, zurechtschneiden, erweitern, vertauschen und all diese Prozesse automatisieren. sed eignet sich immer dann, wenn Textbearbeitungen wiederholt ablaufen müssen.

sed überschneidet sich in einigen Aspekten mit awk und mit perl. Im Gegensatz zu perl besitzt sed keine wirklichen Variablen und Steueranweisungen. Man wird keine Programme für sed schreiben, die diesen Namen wert sind. Aus diesem Grunde ist sed aber auch weit weniger komplex. Man hat üblicherweise in ein paar Minuten brauchbare Ergebnisse.

Viele sed-Kommandos kann man zudem auch in vi oder ed interaktiv verwenden, was ihm eine steile Lernkurve beschert. Wer vi mit regulären Ausdrücken beherrscht, beherrscht im Prinzip auch sed.

Installation

Das Programm ist als sed in core verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S sed

Bedienung

Man startet sed üblicherweise mit Ein- und Ausgabeumleitung:

sed -e "..."  < Eingabedatei > Ausgabedatei
sed -f script < Eingabedatei > Ausgabedatei

Die erste Variante führt einen einzelnen Ausdruck aus, den man hinter -e angibt. In vielen Fällen mag dies ausreichend sein. Wird der Ausdruck komplizierter, oder will man mehrzeilige oder mehrere Ausdrücke verwenden, so schreibt man diese üblicherweise in eine einfache Textdatei und übergibt sed diese Textdatei hinter -f. sed führt dann nacheinander Zeile für Zeile aus und wendet Ausdruck für Ausdruck auf die Eingabedaten an.

Die Standardeingabe funktioniert selbstverständlich auch interaktiv. Man prüfe sed beispielsweise durch folgenden Aufruf

sed -e "s/ein/kein/g"

und schreibe dann einen Text mit dem Wort "ein"

Dies ist ein schönes Bein. [Enter]

sed antwortet umgehend mit der transformierten Zeile

Dies ist kein schönes Bkein.

und wartet auf weitere Eingaben. (Der aufmerksame Leser bemerkt gleich eine kleine Schwierigkeit ...) Man beendet einen solcherart interaktiv gestarteten sed am besten mit Ctrl-C.

Achtung: es führt wahrscheinlich zu einem sehr ärgerlichen Fehler, wenn man versucht, ein und dieselbe Datei als Ein- und Ausgabe zu verwenden. Diese wird dabei zerstört! Soll eine Datei umgewandelt werden und dabei ihren Namen behalten, so ist dies nur über den Umweg einer temporären Datei möglich:

sed -f script < file > tmp
mv -f tmp file

Einsatzfälle

Typische Einsatzfälle liegen in der Bearbeitung großer Textdateien, vor allem Log-Dateien. So lässt sich eine megabytegroße Log-Datei innerhalb von einer Sekunde auf ein paar Kilobyte zurechtschneiden, die nur noch die Zeilen eines bestimmten Tages oder TRACE-Zeilen einer bestimmten Funktion enthält.

Ein weiterer Fall ist die Nachbearbeitung von generierten Quelldateien, z.B. solcher von flex, bison oder gSOAP. Gelegentlich muss man ein #include hinzufügen oder ein #ifdef. sed erledigt das vollautomatisch und immer wieder in der gleichen Qualität sofort im Anschluss an die Generierung.

Einfache Konvertierungen. Obwohl heute für viele Dinge auch echte Konvertierprogramme existieren, beispielsweise iconv für Zeichensätze, kann man einfache Transformationen auch mit sed ausführen, beispielsweise DOS/UNIX-Zeilenenden ineinander umwandeln oder (und da wird's gleich interessant) eine Datumsschreibweise in eine andere.

Weblinks