Home · Kontakt · Impressum
contents index previous up next
Next: 7.7.7 diff Up: 7.7 Suchen und Ersetzen Previous: 7.7.5 expand und unexpand

Unterabschnitte



7.7.6 sed

sed ist die Abkürzung für Streaming Editor. Eigentlich ist das Kommando kein Editor sondern ein Textfilter, der bestimmte Zeichenkombinationen sucht und ersetzt. Die Verarbeitung eines Streams oder Datenstroms bedeutet, daß von der Standardeingabe (stdin) Daten angenommen werden und auf die Standardausgabe (stdout) wieder ausgegeben werden. Als Datenquelle kann neben der Standardeingabe auch eine Datei fungieren.

sed [OPTIONEN] [KOMMANDO] [DATEILISTE] 
sed [OPTIONEN] [-f SCRIPTFILE] [DATEILISTE]

Es werden grundsätzlich zwei Möglichkeiten genutzt um sed aufzurufen. Im ersten Fall wird das KOMMANDO auf der Befehlszeile eingegeben und auf die angegebenen Dateien angewendet. Im zweiten Fall stehen die Anweisungen in einer externen Skriptdatei. Diese wird abgearbeitet und die darin enthaltenen Kommandos auf den Inhalt der Dateien angewendetet. Sollte keine Datei angegeben sein, so liest sed von der Standardeingabe. Dabei wird jede gelesene Zeile mit den sed-Kommandos bearbeitet und in einen Puffer geschrieben. Dessen Inhalt wird dann zum Schluß auf der Standardausgabe ausgegeben.

Optionen
-V Versionsnummer
-h Hife
-e SCRIPT Zusätzliche Skriptanweisung zur Bearbeitung
-f SCRIPTFILE Datei, die die Skriptbefehle enthält
-n Ausgabe erfolgt nur bei Benutzung des `p' Kommandos
 

Jeder Befehl kann durch einen Bereich, für den er gültig ist, eingeschränkt werden. Die Bereichsangabe erfolgt im Format
VON
oder
VON, BIS.

Dabei können die Werte für VON und BIS

7.7.6.0.1 Ersetzen

Die folgenden Sequenzen weisen sed an, eine Zeichenkette durch eine andere zu ersetzen.
sed s/SUCHEN/ERSETZEN/
sed s/SUCHEN/ERSETZEN/g
sed s/SUCHEN/ERSETZEN/p
sed -n s/SUCHEN/ERSETZEN/gp
sed s3/SUCHEN/ERSETZEN/
Die Zeichenkette zwischen dem ersten und dem zweiten Schrägstrich gibt das Suchmuster an, während die Zeichenkette zwischen dem zweiten und dem dritten Schrägstrich den Ersetzungstext enthält.

Um das Suchmuster effektiver zu gestalten, können reguläre Ausdrücke7.1 verwendet werden. Diese bestehen normalerweise aus zwei Komponenten: Die Angabe, nach welchem Zeichen gesucht wird, und die Angabe, wie oft das Zeichen auftreten darf.

Die hinten angestellten Optionen verändern die Arbeitsweise von sed. Dabei bewirkt g, daß alle Zeichenketten in der Zeile durch die neue Zeichenkette ersetzt werden (Sonst nur die erste Zeichenkette). Das p führt dazu, daß die Zeilen ausgegeben werden, in denen eine Ersetzung erfolgte. Sind beide Optionen gesetzt, so wird bei einer mehrfachen Ersetzung in einer Zeile die Zeile auch mehrfach angezeigt. Verhindert wird dies durch den Schalter -n. Das s3 sorgt dafür, daß das dritte Vorkommen von SUCHEN in der Zeile ersetzt wird.

7.7.6.0.2 Suchen

Die Sequenz
/SUCHEN/p
im Zusammenhang mit dem Schalter -n bewirkt, daß nur die Zeilen, die das Suchmuster enthalten, ausgegeben werden.

7.7.6.0.3 Zeilen löschen

Wenn der Schalter -n nicht gesetzt ist, werden alle Zeilen nach der Bearbeitung ausgegeben. Um zu verhindern, daß bestimmten Zeilen ausgegeben werden, wird die Sequenz
/SUCHEN/d
verwendet.

7.7.6.0.4 Dateien einfügen

Durch die Sequenz
/SUCHEN/r DATEINAME
werden alle Zeilen, die das Suchmuster enthalten, durch den Inhalt der Datei DATEINAME ersetzt.

7.7.6.0.5 Auswahl in Datei schreiben

Durch die Sequenz
/SUCHEN/w DATEINAME
werden alle Zeilen, die das Suchmuster enthalten, in die Datei DATEINAME geschrieben.

7.7.6.0.6 Beispiele

 
Ersetzt jedes Wort ``UNIX'' durch das Wort ``Linux'' in der Datei einleitung.tex.
sed 's/UNIX/Linux/g' einleitung.tex

Ersetzt jedes Wort ``paragraph'' durch das Wort ``subsubsection'' in der Datei linux.tex und schreibt das Ergebnis in die Datei linuxneu.tex.
sed 's/paragraph/subsubsection/g' linux.tex > linuxneu.tex

Einen interessanten Effekt hat das Zeichen '&' in der Ersetzungszeichenkette. Die gesuchte Zeichenkette wird nicht ersetzt, sondern die Ersetzungszeichenkette wird hinten angefügt.
sed 's/</&lt;/g' index.html
Damit die schließende spitze Klammer ersetzt wird, muß das kaufmännische Und auskommentiert werden.
sed 's/</\</g' index.html

Ersetzt alle Zeichenfolgen ``man'' durch ``frau'' in den Zeilen 1 bis 3 in der Datei einleitung.tex. Dabei werden nur die Zeilen ausgegeben, in denen die Änderung erfolgte.
sed -n '1,3s/man/frau/p' einleitung.tex

Gibt alle Zeilen aus, die entweder ``man'' oder ``frau'' enthalten.
sed -n -e '/man/p' -e '/frau/p' einleitung.tex

Das folgende Kommando löscht alle Zeilen, die die Zahl `0' enthalten.
sed '/0/d' einleitung.tex

Alle Zeilen, die die Zeichenkette ``include'' enthalten, werden durch den Inhalt der Datei include.txt ersetzt.
sed '/include/r include.txt' einleitung.txt

Alle Zeilen, die die Zeichenkette ``section'' enthalten, werden in die Datei inhalt.txt geschrieben. sed '/section/w inhalt.txt' einleitung.tex


contents index previous up next
Next: 7.7.7 diff Up: 7.7 Suchen und Ersetzen Previous: 7.7.5 expand und unexpand
  © 2004 by IT-Dozent Ole Vanhoefer · Zum Seitenanfang