Anfang
Inhalt
Einleitung
Erste Schritte
Die Bash
Das Dateisystem
Nutzerkommandos
Installation
Shells
Unix-Werkzeuge
Vi
Emacs
Reguläre Ausdrücke
Grep
Sed
Awk
Make & Makefile
System-Administration
X Window System
Der Kernel
Netzwerk Grundlagen
Netzwerk Clients
Netzwerk Server
Netzwerk Sicherheit
Anhang
Register
|
Unix Werkzeuge - Der Stream Editor
|
|
Der Stream Editor ist kein herkömmlicher Editor wie Vi oder
Emacs. Der Sed arbeitet nicht interaktiv; er wird
mittels Kommandozeilenoptionen oder durch ein Skript gesteuert. Der Stream Editor
modifiziert niemals das Original, sondern schreibt das Ergebnis auf die Standard-Ausgabe.
Die aktuell betrachtete Zeile lädt der Sed in einen temporären Puffer -
nachfolgend als Arbeitspuffer bezeichnet.
Der Aufruf des Stream Editors auf der Kommandozeile besitzt immer folgendes
Format:
Die Aktionen von Sed werden durch Kommandos gesteuert. Diese Kommandos
können Zeilenangaben oder -bereiche enthalten, dann betrachtet der Editor nur die
Zeilen der zu bearbeitenden Datei. Fehlt eine solche Angabe, bearbeitet Sed die
gesamte Datei.
Bevor wir das Verhalten anhand von Beispielen kennen lernen, seien alle Kommandos
aufgeführt:
a |
|
Fügt eine oder mehrere Zeilen an die aktuelle Zeile an |
c |
|
Ersetzt Text in der aktuellen Zeile |
d |
|
Löscht Zeile(n) |
g |
|
Kopiert den Inhalt eines temporären Puffers in den Arbeitspuffer (dessen alter Inhalt geht verloren) |
G |
|
Fügt den Inhalt eines temporären Puffers an den Inhalt des Arbeitspuffers an |
h |
|
Kopiert den Inhalt des Arbeitspuffers in einen temporären Puffer |
H |
|
Fügt den Inhalt des Arbeitspuffers an einen temporären Puffer an |
i |
|
Fügt Text oberhalb er aktuellen Zeile ein |
l |
|
Zeigt nicht druckbare Zeichen an |
n |
|
Wendet das nächste Kommando anstelle des aktuellen Kommandos auf die nächste Zeile an |
p |
|
Druckt Zeile(n) |
q |
|
Beendet den Editor |
r |
|
Liest Zeilen aus einer Datei |
! |
|
Wendet das Kommando auf Zeilen an, die nicht zutreffen |
Im Zusammenhang mit Substitutionen werden die Kommandos häufig als Flags
bezeichnet. Beachten Sie, dass die Wirkung mancher Kommandos (»g«) aus dem
Kontext entschieden wird.
g |
|
Globale Ersetzung (jedes Vorkommen des Musters auf der Zeile) |
p |
|
Ausgabe der Zeile in Verbindung mit "s". |
s |
|
Ersetzen eines Musters durch ein anderes |
w |
|
Ausgabe der bearbeiteten Zeilen in eine Datei |
x |
|
Austausch des Inhalts des Zwischenspeichers mit der aktuell bearbeiteten Zeile |
y |
|
Ersetzen eines Zeichens durch ein anderes |
Von den Regulären Ausdrücken versteht der Stream Editor Folgende:
^ |
|
Zeilenanfang |
$ |
|
Zeilenende (bei der Adressierung steht das Zeichen für die letzte Zeile) |
. |
|
Ein Zeichen (Ausnahme ist der Zeilenumbruch) |
* |
|
Keine, eine oder mehrere Wiederholungen des vorhergehenden Buchstabens / der vorhergehenden Gruppe |
[...] |
|
Ein Zeichen aus der Menge |
[^...] |
|
Kein Zeichen aus der Menge |
\(...\) |
|
Speichern des enthaltenen Musters |
& |
|
Enthält das Suchmuster |
\< |
|
Wortanfang |
\> |
|
Wortende |
x\{m\} |
|
m-fache Wiederholung des Zeichens x |
x\{m,\} |
|
Mindestens m-fache Wiederholung des Zeichens x |
x\{m,n\} |
|
Mindestens m-, maximal n-fache Wiederholung des Zeichens x |
Die Handhabung des Stream Editors erlernen Sie vermutlich nur durch Beispiele. Es liegt also nahe,
dem Leser mittels des Beispieltextes gleichzeitig neues Wissen einzuimpfen. Die folgende
Abhandlung diskutiert die Adressierungsmöglichkeiten des Sed (das Schema
lässt sich u.a. auch im Vi anwenden):
user@sonne> cat sedtest.txt |
Der Aufruf des Stream Editors besitzt immer das Format: |
|
sed 'Kommando' Dateiname |
|
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
Mechanismen in Frage: |
|
Keine Angabe |
Alle Zeilen |
Nummer |
Genau diese Zeile |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
$ |
Symbolisiert die letzte Zeile |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Um die spätere Arbeit des Editors besser verfolgen zu können, nummerieren
wir noch die Datei:
user@sonne> nl -w 2 -b a
sedtest.txt | tee test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
9 |
Keine Angabe |
Alle Zeilen |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Zunächst wenden wir das Kommando p auf die ersten 3 Zeilen der Datei an:
user@sonne> sed '1,3p'
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
2 |
|
3 |
sed 'Kommando' Dateiname |
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
9 |
Keine Angabe |
Alle Zeilen |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Offensichtlich zeigt der Stream Editor etwas mehr an, als uns lieb ist; er gibt
einfach die gesamte Datei aus und wiederholt nur die Zeilen, die durch das Kommando
»1,3p« bearbeitet wurden. Um solche »überflüssigen«
Ausgaben zu unterbinden, muss die Option »-n« verwendet werden:
user@sonne> sed -n '1,3p'
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
|
Bei der Adressierung mittels regulärer Ausdrücke müssen diese in
Schrägstriche (Slashes) eingeschlossen sein:
user@sonne> sed -n
'/RegEx/,/RegEx/p' test.txt |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Der nachfolgende Aufruf löscht alle Zeilen ab der (einschließlich) 4. bis
zum Dateiende:
user@sonne> sed '4,$d'
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
|
Das Entfernen aller Zeilen, die mit einem Leerzeichen beginnen, erledigt dieser
Aufruf:
user@sonne> sed '/^ /d'
test.txt |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Das dem s-Kommando folgende Zeichen wird als Trennzeichen angesehen.
Anschließend folgt das Suchmuster und, getrennt durch das Trennzeichen, das
Ersatzmuster, welches wiederum mittels des Trennzeichens abgeschlossen wird. Prinzipiell
kann jedes druckbare Zeichen als Trennzeichen Verwendung finden, es selbst darf
allerdings kein Bestandteil eines Musters sein! Eine Substitution sieht demnach wie folgt
aus:
sed 's/altes Muster/neues Muster/' datei
sed 's?altes Muster?neues Muster?' datei |
Im Beispiel ersetzen wir »RegEx« durch »Regulärer
Ausdruck«:
user@sonne> sed
's#RegEx#Regulärer Ausdruck#' test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
9 |
Keine Angabe |
Alle Zeilen |
|
10 |
Nummer |
Genau diese Zeile |
|
11 |
Start, Ende |
Alle Zeilen von "Start" bis
"Ende" |
|
12 |
$ |
Symbolisiert die letzte Zeile |
|
13 |
Regulärer Ausdruck Zeilen, die den
Regulären Ausdruck enthalten |
14 |
1, Regulärer Ausdruck Von Zeile 1 bis zur ersten
Zeile, die Regulärer Ausdruck enthält |
|
Wer genau hinschaute, wird im letzten Beispiel eine fehlende Ersetzung von
»RegEx« bemerkt haben (Zeile 14). Der Editor bearbeitet in jeder Zeile nur
das erste Vorkommen. Um alle Muster zu ersetzen, ist das Kommando »g«
nachzustellen:
user@sonne> sed -n
's#RegEx#Regulärer Ausdruck#gp' test.txt |
13 Regulärer
Ausdruck Zeilen, die den Regulären Ausdruck
enthalten |
14 1, Regulärer Ausdruck Von Zeile
1 bis zur ersten Zeile, die Regulärer Ausdruck enthält |
|
Da wir nur an den modifizierten Zeilen interessiert sind, haben wir das Sed
mitgeteilt (Option -n). Allerdings würde nun das Substitutionskommando die gesamte
Ausgabe unterdrücken, hätten wir dem nicht mit dem p-Kommando entgegen
gewirkt.
Ein (zugegeben... etwas konstruiertes) Beispiel soll das Speichern von Mustern und den
späteren Zugriff darauf demonstrieren. Es soll die Nummerierung der Zeilen von
Einer- auf Zehnerschritte erhöht werden:
user@sonne> sed
's/^\(\[[:space:]]*[1-9]\{1,\}\)/\10/' test.txt |
10 |
Der Aufruf des Stream Editors besitzt immer das Format: |
20 |
|
30 |
sed 'Kommando' Dateiname |
40 |
|
50 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
60 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
70 |
Mechanismen in Frage: |
80 |
|
90 |
Keine Angabe |
Alle Zeilen |
100 |
Nummer |
Genau diese Zeile |
110 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
120 |
$ |
Symbolisiert die letzte Zeile |
130 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
140 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Das Beispiel profitiert von dem Wissen, dass die Zeilenummer am Beginn der Zeile zu
finden ist. Das Muster, dem unser Interesse gilt, sind alle Ziffern zu Beginn der Zeile,
wobei führende Leerzeichen durchaus möglich sind. Genau jenes Muster merken wir
uns für den späteren Gebrauch vor, indem wir es in »\(...\)«
einschlie&szlIg;en. Der Zugriff auf dieses erste gespeicherte Muster im
Ersatzmuster erfolgt durch »\1«.
Bis zu 9 Muster lassen sich pro Zeile speichern, die entsprechend ihrer Reihenfolge
mittels \1, \2,... \9 referenziert werden.
Das Problem mit Kommandos wie »s« ist, dass sie keine Adressierung
zulassen. Sicher gibt es Situationen, wo nur ein Teil einer Datei zu bearbeiten ist. Hier
hilft das e-Kommando, mit dem sich beliebig viele Kommandos kombinieren lassen:
user@sonne> sed -e '3,$d' -e
's# #.#g' test.txt |
.1 |
Der.Aufruf.des.Stream.Editors.besitzt.immer.das.Format: |
.2 |
|
|
Zuerst werden alle Zeilen ab der 3. Zeile entfernt und anschließend die
Leerzeichen durch Punkte ersetzt. Aber Vorsicht... mitunter beeinflusst die Reihenfolge
der Kommandos das Ergebnis!
Eine alternative Angabe ist die Gruppierung mehrerer Kommandos. Hierzu werden diese in
geschweifte Klammern gesetzt und ein Semikolon nach jedem Kommando eingefügt
user@sonne> sed '{s/
/./g;3,$d}' test.txt |
.1 |
Der.Aufruf.des.Stream.Editors.besitzt.immer.das.Format: |
.2 |
|
|
Die Syntax zum Einfügen ist wohl etwas gewöhnungsbedürftig. Der
einzufügende Text muss auf einer neuen Zeile stehen, wobei jede Zeile bis auf die
letzte durch einen Backslash abzuschließen ist. Das Kommando »i«
(insert) fügt den Text vor der betreffenden Zeile ein, »a«
(append) schreibt den neuen Text nach der Zeile.
user@sonne> sed
'8i\ |
===========================================\ |
|
Angabe |
Bereich von Zeilen\ |
==========================================='
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
=========================================== |
|
Angabe |
Bereich von Zeilen |
=========================================== |
9 |
Keine Angabe |
Alle Zeilen |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Wohl in seltenen Fällen wird ein Text nur in eine einzige Datei eingefügt
werden (sonst wäre der Griff zu einem herkömmlichen Editors der effizientere
Weg). Eine gangbare Methode ist, den einzusetzenden Text in einer separaten Datei zu
erfassen und Sed jene unterzuschieben.
user@sonne> cat
ins.tex |
=========================================== |
|
Angabe |
Bereich von Zeilen |
=========================================== |
|
Dieser Text lässt sich mittels des r-Kommandos einfach an beliebiger Stelle
einordnen:
user@sonne> sed '8r ins.txt'
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
=========================================== |
|
Angabe |
Bereich von Zeilen |
=========================================== |
9 |
Keine Angabe |
Alle Zeilen |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Das Ergebnis des Stream Editors lässt sich in einer Datei speichern:
user@sonne> sed -n '/^1/w
out.txt' test.txt |
user@sonne> cat
out.txt |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
Soll erst die dem Suchmuster folgende Zeile manipuliert werden, ist das n-Kommando der
beste Kandidat::
user@sonne> sed -n
'8,${n;s/\(.\{1,\}\)/*\1/p;}' test.txt |
* 9 |
Keine Angabe |
Alle Zeilen |
*11 |
$ |
Symbolisiert die letzte Zeile |
*13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
|
Die Kommandozeile ist schwer verdaulich... aber der Reihe nach:
»-n« als Kommandozeilenoption besagt, dass de Ausgabe einzig die
bearbeiteten Zeilen betreffen soll. Da jedoch das Flag »s« sämtliche
Ausgaben »verschluckt«, muss »p« am Ende bemüht werden.
»8,$« adressiert die Zeilen 8 bis zum Ende der Datei. Die erste Zeile, die
also gefunden wurde, ist die 8. »-n« als Substitutionskommando bewirkt nun,
dass die nächste Zeile in die Mangel genommen wird - Zeile 9.
Diese 9. Zeile wird nun substituiert. ».\{1,\}« meint »mindestens
ein (\{1,\}) beliebiges (.) Zeichen. Da jede Zeile im Beispiel zumindest die Zeilenummer
umfasst und das komplette Muster via »\(...\)« gespeichert wird, erscheint
die gesamte Zeile mit vorangestelltem Stern (*\1) in der Ausgabe...
Sed fährt mit der folgenden Zeile (10) fort, die (wegen Flag
»n«) übersprungen wird...
Einzelne Zeichen lassen sich durch andere einzelne Zeichen ersetzen. Das Zeichen an
Position x der Liste zu ersetzender Zeichen wird in das Zeichen an Position
x der Liste der neuen Zeichen transformatiert. Damit ist klar, dass beide
Zeichenlisten dieselbe Länge besitzen müssen:
user@sonne> sed
'y/abcdefghijklmnopqrstuvwxyz/zyxwvutsrqponmlkjihgfedcba/' test.txt |
1 |
Dvi Afuifu wvh Sgivzn Ewrglih yvhrgag rnnvi wzh Flinzg: |
2 |
3 |
hvw 'Klnnzmwl' Dzgvrmznv |
4 |
5 |
Dzyvr pzmm wvn Klnnzmwl nrgtvgvrog dviwvm, dvoxsv Zvrovm
wvi |
6 |
Ermtzyvwzgvr vh yvziyvrgvm hloo. Aoh Awivhhrvifmt plnnvm
ulotvmwv |
7 |
Mvxszmrhnvm rm Fiztv: |
8 |
9 |
Kvrmv Amtzyv |
Aoov Zvrovm |
10 |
Nfnnvi |
Gvmzf wrvhv Zvrov |
11 |
Sgzig, Emwv |
Aoov Zvrovm elm "Sgzig" yrh "Emwv" |
12 |
$ |
Sbnylorhrvig wrv ovgagv Zvrov |
13 |
RvtEc |
Zvrovm, wrv wvm Rvtfo/auml;ivm Afhwifxp vmgszogvm |
14 |
1, RvtEc |
Vlm Zvrov 1 yrh afi vihgvm Zvrov, wrv RvtEc vmgsäog |
|
Manchmal ist es sinnvoll, den Stream Editor vorzeitig zu beenden:
user@sonne> sed '3q'
test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
user@sonne> sed -n
'/sed/{p;q;}' test.txt |
3 |
sed 'Kommando' Dateiname |
|
Die soeben bearbeitete Zeile hält der Sed in einem Zwischenspeicher und
bearbeitet diese in diesem »Pattern Space«. Hat der Editor seine Arbeit
beendet, gibt er die Zeile aus und lädt die folgende Zeile der Eingabedatei in den
Zwischenspeicher.
Mit dem Kommando »h« kann der aktuelle Zwischenspeicher in einen Puffer
gesichert werden (»holding buffer«). Das Kommando »G« fügt
den Inhalt dieses Sicherungspuffers hinter der aktuell bearbeiteten Zeile ein;
»g« ersetzt die aktuelle Zeile durch den Inhalt des Sicherungspuffers.
Den Inhalt der beiden Puffer vertauscht das Kommando »x«.
user@sonne> sed -e
'/sed/{h;d;}' -e '4G' -e '4q' test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
4 |
|
3 |
sed 'Kommando' Dateiname |
user@sonne> sed -e
'/sed/{h;d;}' -e '4g' -e '4q' test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
|
Erklärung: Das erste Kommando »-e '/sed/{h;d;}'« in beiden
Aufrufen teilt dem Editor mit, die Zeile, die Sed enthält, zuerst in den
Zwischenspeicher zu sichern und nachfolgend zu löschen. Das zweite Kommando
vollzieht das Einfügen des Inhalts des Puffers. »-e '4G'« fügt nach
der 4.Zeile ein (Achtung: die gelöschte Zeile wird mitgezählt!); »-e
'4Gg'« ersetzt die 4.Zeile. Das letzte Kommando »-e '4q'« beendet die
Arbeit des Editors nach der 4. Zeile.
user@sonne> sed -e
'/Aufruf/h' -e '/Angabe/x' -e '$G' test.txt |
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
2 |
|
3 |
sed 'Kommando' Dateiname |
4 |
|
5 |
Dabei kann dem Kommando mitgeteilt werden, welche Zeilen
der |
6 |
Eingabedatei es bearbeiten soll. Als Adressierung kommen
folgende |
7 |
Mechanismen in Frage: |
8 |
|
1 |
Der Aufruf des Stream Editors besitzt immer das Format: |
10 |
Nummer |
Genau diese Zeile |
11 |
Start, Ende |
Alle Zeilen von "Start" bis "Ende" |
12 |
$ |
Symbolisiert die letzte Zeile |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
9 |
Keine Angabe |
Alle Zeilen |
|
Erklärung: Enthält eine Zeile das Muster »Aufruf«, wird
sie im Zwischenpuffer abgelegt. Steht in einer Zeile »Angabe«, so wird diese
Zeile mit dem Inhalt des Zwischenpuffers vertauscht. Der Inhalt des Zwischenpuffers wird
hinter der letzten Zeile eingefügt.
Kompliziertere und häufig benötigte Sed-Aufrufe schreibt man besser
in eine Datei. Ein Aufruf des Editors sieht dann wie folgt aus:
sed -f <Skript_Datei> <zu_bearbeitende_Datei> |
Beim Schreiben eines Skripts gelten folgende Regeln:
- Beginnt eine Zeile mit einem Doppelkreuz #, so handelt es sich um einen
Kommentar
- Vor und nach einem Kommando dürfen keine Leerzeichen, Tabulatoren...
stehen
- Stehen mehrere Kommandos auf einer Zeile, sind sie durch Semikola voneinander zu
trennen
Der Stream Editor wird das gesamte Skript auf jede Zeile der Eingabedatei
anwenden.
Als Beispiel dient ein kleines Skript, dass alle deutschen Umlaute in der Eingabedatei
durch den entsprechenden Unicode (für html) ersetzt.
user@sonne> cat umlaut
# Ersetzen der äüö... durch Unicode
s/ä/\ä/g
s/ü/\ü/g
s/ö/\ö/g
s/Ä/\Ä/g
s/Ü/\Ü/g
s/Ö/\Ö/g
s/ß/\ß/g
|
Das Anwendungsbeispiel demonstriert die Möglichkeit der Kopplung von
Kommandozeilenbefehlen und einem Skript:
user@sonne> sed -e '1,12d'
-f umlaut test.txt |
13 |
RegEx |
Zeilen, die den Regulären Ausdruck enthalten |
14 |
1, RegEx |
Von Zeile 1 bis zur ersten Zeile, die RegEx enthält |
|
|
|