12.5 sed-Scripts
Neben der Methode, den sed-Befehl in den Shellscripts wie übliche Befehle oder sed in der Kommandozeile zu verwenden, haben Sie noch eine dritte Möglichkeit, nämlich echte sed-Scripts zu schreiben. Der Vorteil ist, dass Sie so immer wieder verwendete sed-Kommandos gleich zur Hand haben und vor allem bei etwas längeren sed-Kommandos den Überblick behalten. Das sed-Script können Sie natürlich trotzdem in einem Shellscript verwenden, nur benötigen Sie dann neben dem Shellscript auch noch das sed-Script.
Damit sed weiß, dass es sein Kommando aus einer Datei erhält, müssen Sie die Option –f (file) verwenden. Die Syntax:
sed -f sed_script.sed Datei
Folgendes müssen Sie beim Verwenden von sed-Scripts beachten:
|
Mehrere Kommandos in einer Zeile müssen durch ein Semikolon getrennt werden. |
|
Keine Leerzeichen, Tabulatoren etc. vor und nach den Kommandos |
|
Eine Zeile, die mit # beginnt, wird als Kommentar behandelt. |
Hier ein einfaches sed-Script, mit dem Sie eine Textdatei in eine HTML-Datei einbetten können:
# Name: text2html.sed
# Sonderzeichen '<', '>' und '&' ins HTML-Format
s/&/\&/g
s/</\</g
s/>/\>/g
# Zeile 1 selelektieren wir mit insert für den HTML-Header
1 i\
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\
<html>\
<head>\
<title>\
Converted with txt2html.sed\
</title>\
</head>\
<body>\
<pre>
# Hier kommt der Text der Datei hin
# Mit append hängen wir den Footer ans Ende
$ a\
</pre>\
</body>\
</html>
Dieses Script können Sie nun wie folgt anwenden:
you@host > sed -f text2html.sed mrolympia.dat > mrolympia.html
you@host > cat mrolympia.html
<head>
<title>
Converted with txt2html.sed
</title>
</head>
<body>
<pre>
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975
Franco Columbu Argentinien 1976 1981
Chris Dickerson USA 1982
Samir Bannout Libanon 1983
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004
</pre>
</body>
</html>
Dieses HTML-Dokument können Sie sich nun mit einem beliebigen Webbrowser Ihrer Wahl ansehen. In einem Shellscript mit vielen Dateien auf einmal können Sie das Ganze wie folgt realisieren:
# Alle Dateien aus der Kommandozeile; alternativ könnte hier auch
# das Metazeichen * verwendet werden, sodass alle Dateien aus dem
# aktuellen Verzeichnis bearbeitet werden
for file in "$@"
do
sed -f txt2html.sed $file > temp
# Achtung, hier wird das Original verändert!!!
mv tmp $file
done
Hinweis An dieser Stelle muss ich nochmals darauf hinweisen, dass eine Umleitung wie sed -f script datei > datei deshalb nicht funktioniert, weil die Eingabe die Ausgabe überschreiben würde.
|
Jetzt haben Sie noch eine weitere Möglichkeit, sed zu verwenden und zwar als eigenständiges Programm. Hierzu müssen Sie nur die Ausführrechte entsprechend setzen und in der ersten Zeile Folgendes eingeben:
#!/usr/bin/sed -f
Jetzt können Sie (im Beispiel nochmals das text2html-Script) das sed-Script wie ein gewöhnliches Shellscript ausführen:
you@host > chmod u+x text2html.sed
you@host > ./text2html.sed mrolympia.dat > mrolympia.html
Hinweis Eine interessante Sammlung von sed-Scripts (auch von weiteren Dokumentationen, Links etc.) finden Sie unter http://sed.sourceforge.net/grabbag/.
Hinweis sed unterstützt übrigens auch Sprungziele (label) – einen unbedingten Sprung (es wird also immer gesprungen). Diesen Hinweis wollte ich geben, falls Sie sich noch intensiver mit den sed-Scripts auseinander setzen wollen.
|
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|