Notice: Undefined index: string in /var/www/stefan/howtux.de/htdocs/article.php on line 49

Notice: Undefined index: settings in /var/www/stefan/howtux.de/htdocs/article.php on line 61
Home / Filterprogramme und Reguläre Ausdrücke (sed und grep) / Automatische Textbearbeitung mit sed

Automatische Textbearbeitung mit sed

Kategorie: Filterprogramme und Reguläre Ausdrücke (sed und grep)Erstellt: 02.10.2007 - 23:58 Geändert: 02.06.2009 - 12:26
Autor: Stefan Abu Salah

Notice: Undefined variable: urli in /var/www/stefan/howtux.de/htdocs/functions.php on line 96
0Die Funktionsweise von sed (stream editor) ist nicht mit der eines normalen Editors zu vergleichen. Es gibt keinerlei Möglichkeit während der Verarbeitung eines Textes interaktiv in den Ablauf einzugreifen, wie man dies von normalen Editoren kennt. sed manipuliert Eingabestreams zeilenweise anhand von vom Anwender vorgegebenen Filterregeln und gibt das Ergebnis aus.

file

sed ist besonders hilfreich wenn große Mengen von Textdateien verarbeitet werden müssen. Ersetzungen in Textdateien können automatisiert mittels regulärer Ausdrücke vorgenommen werden. sed ist eines der wichtigsten Tools der UNIX-Shell. Auch wenn es keine ausgefeilte Programmiersprache (wie beispielsweise awk) bietet, so ist es schnell und einfach einsetzbar.

Man benutzt sed indem man einen regulären Ausdruck in zwei Slashes und den Befehl vor oder hinter die Slashes schreibt. Je nach Befehl bewirkt dies nun eine Manipulation des Eingabestreams. Wichtig ist auch hier das Einfassen der Muster in einfache Hochkommatas, damit die Shell nicht auf dumme Gedanken kommt und Metazeichen versucht zu interpretieren.

Beispiel (Ausgabe aller Zeilen in denen Y oder y vorkommt (Vergleich mit grep) ):

stefan@troubadix/home/stefan$ sed -n '/[Yy]/p' schausteller
Hermesmeyer Vertriebs-GmbH 45478 Mülheim 0204545450
Kleymann oHG 45966 Gladbeck 0204453452
Lehrmann Yvonne 04416 Markkleeberg 01645445458
Skischally Autoskooter 87700 Memmingen 01745145451
Traber Fredy 75045 Walzbachtal 01705245453

Wichtig ist es zu vertehen, dass sed den Eingabestream nicht verändert. Die in obigen Beispiel verwendete Datei schausteller enthält nach wie vor alle ihre Einträge.


Beispiel (Suchen und Ersetzen):

stefan@troubadix/home/stefan$ sed 's/[Yy]/üüü/' schausteller
...
Simon Andreas 65558 Isselbach 06434540468
Skischallüüü Autoskooter 87700 Memmingen 01745145451
Sobotta Horst 47229 Dinslaken 0206454556
Traber Fredüüü 75045 Walzbachtal 01705245453
Torgau Rudolf 40468 Düsseldorf 01725446468
...
stefan@troubadix/home/stefan$ sed -n 's/[Yy]/üüü/p' schausteller
Hermesmeüüüer Vertriebs-GmbH 45478 Mülheim 0204545450
Kleüüümann oHG 45966 Gladbeck 0204453452
Lehrmann üüüvonne 04416 Markkleeberg 01645445458
Skischallüüü Autoskooter 87700 Memmingen 01745145451
Traber Fredüüü 75045 Walzbachtal 01705245453
Beispiel (Suchen, Ersetzen und speichern in Datei):

stefan@troubadix/home/stefan$ sed -n 's/[Yy]/üüü/w result.txt' schausteller
stefan@troubadix/home/stefan$ cat result.txt
Hermesmeüüüer Vertriebs-GmbH 45478 Mülheim 0204545450
Kleüüümann oHG 45966 Gladbeck 0204453452
Lehrmann üüüvonne 04416 Markkleeberg 01645445458
Skischallüüü Autoskooter 87700 Memmingen 01745145451
Traber Fredüüü 75045 Walzbachtal 01705245453

Ähnlich wie die Anweisung s, welcher ganze Strings ersetzt, arbeitet y. Im Unterschied zu s tauscht y jedoch keine ganzen Strings, sondern einzelne Buchstaben. Desweiteren sucht y nicht nach Ausdrücken, sondern explizit nach den ihm angegebenen Zeichen. y erwartet zwei gleichlange Eingabestrings und tauscht dann im Eingabestream immer die der Position entsprechenden Zeichen aus.

Beispiel (Suchen und Ersetzen von einzelnen Zeichen):

stefan@troubadix/home/stefan$ sed 'y/ABCDE/VWXYZ/' schausteller
Vhrend Zrwin 31582 Nienburg 017232646216
Vlbrecht Willi 64560 Riedstadt 0616872010
Vlisch Vlfred 32257 Wünde 01726720725
Wutton LoMagic 47228 Yuisburg 0206450452
Wügler Yavid 59063 Hamm 01725454570
Wügler Wolfgang 52372 Kreuzau 01715454590
Wügler Willi 52372 Kreuzau 01705454533
Xebo Worbeck 45355 Zssen 0204889954
Xlausen Tanja 58000 Hagen 017457887747
...

Mit der Option -e können mehrere Ausdrücke hintereinander gehangen werden.

Beispiel (Suchen und Ersetzen von einzelnen Zeichen):

stefan@troubadix/home/stefan$ sed -n -e 's/[Yy]/üüü/p' -e 's/^[Vv]/ööö/p' schausteller
Hermesmeüüüer Vertriebs-GmbH 45478 Mülheim 0204545450
Kleüüümann oHG 45966 Gladbeck 0204453452
Lehrmann üüüvonne 04416 Markkleeberg 01645445458
Skischallüüü Autoskooter 87700 Memmingen 01745145451
Traber Fredüüü 75045 Walzbachtal 01705245453
öööiersen Bernhard 31275 Lehrte 01745456454
öööorlop Ingo 31275 Lehrte 01745457458
öööorlop Jörg 31319 Sehnde 01645445454

Möchten Sie nach einem Metazeichen filtern, so muss diesem Zeichen ein Backslash "" vorangestellt werden. Dies gilt für die Zeichen: [, ], (, ), {, }, |, ?, +, *, ^, $, , .


Beispiel (Suchen und Ersetzen von Zeichen, welche auch Metazeichen sind):

stefan@troubadix/home/stefan$ cat mein.txt
[Zeile1]
[Zeile2]
[Zeile3]
[Zeile4]
stefan@troubadix/home/stefan$ sed 'y/[]/()/' mein.txt
(Zeile1)
(Zeile2)
(Zeile3)
(Zeile4)

Mit sed kann außerdem auch Zeilenweise gefiltert werden. Dies kann entweder explizit unter Angabe der Zeilennummer, oder per Zeilenbereich geschehen.


Beispiel (Ausgabe von Zeile 10 und Zeile 50 und Ausgabe von Zeile 10 bis 12):

stefan@troubadix/home/stefan$ sed -n -e '10p' -e '50p' schausteller
Finnendahl Friedrich 27751 Delmenhorst 01745646993
Schweizer Birgit 90443 Nürnberg 01705468855

stefan@troubadix/home/stefan$ sed -n '10,12p' schausteller
Finnendahl Friedrich 27751 Delmenhorst 01745646993
Finnendahl Friedrich 28197 Bremen 017454798883
Fischer Louis 32380 Minden 016450450450

Die wichtigsten Anweisungen:

/AUSDRUCK/=
Ausgabe der Zeilennummern der gefundenen Zeilen

/AUSDRUCK/d
Löscht alle Zeilen in denen AUSDRUCK gefunden wird

/AUSDRUCK/p
Gibt die gefundenen Zeilen aus

/AUSDRUCK/g
Alle Veränderungen sollen global auf jede Zeile angewandt werden

/AUSDRUCK/q
Beendet die Verarbeitung nachdem AUSDRUCK gefunden wurde

/AUSDRUCK/a string
Hängt string hinter die Zeile in der AUSDRUCK gefunden wurde

/AUSDRUCK/c string
Ersetzt die gefundenen Zeilen durch string

/AUSDRUCK/i string
Setzt string vor die Zeile in der AUSDRUCK gefunden wurde

/AUSDRUCK/r Datei
Hängt hinter die Zeile in der AUSDRUCK gefunden wurde den Inhalt der Datei an

/AUSDRUCK/w Datei
Schreibt die gefundenen Zeilen (Patternspace) in eine Datei

s/AUSDRUCK/string/
Ersetzt AUSDRUCK durch string (s: Substitution)

y/string1/string2/
Vertauscht Zeichenweise Zeichen aus string1 mit positionsmäßig entsprechendem Zeichen aus string2

Optionen:
-n gibt nur die Zeilen aus, die explizit (durch die Anweisung p) ausgedruckt werden sollen
-V gibt die Versionsnummer und eine Kurzhilfe aus
-e Zeichenkette - wendet die Editorbefehle aus Zeichenkette auf den Text an
-f Datei - liest die Editorbefehle aus der Datei



Notice: Undefined variable: urli in /var/www/stefan/howtux.de/htdocs/classes.php on line 240
Bookmark auf del.icio.usBookmark auf Mister WongBookmark auf BlinklistBookmark auf GoogleBookmark auf LinkarenaBookmark auf YiggBookmark auf FolkdBookmark auf Yahoo
Home / Filterprogramme und Reguläre Ausdrücke (sed und grep) / Automatische Textbearbeitung mit sed
simplum