sed(1) sed(1)
NAME
sed - Editor im Prozedurbetrieb (stream editor)
SYNTAX
sed [-n] [[-e] skript ...] [-f skriptdatei ...] [--] [datei ...]
BESCHREIBUNG
sed ist ein nicht interaktiver, zeilenorientierter Editor mit ähnli-
chem Funktionsumfang wie der auch zeilenorientierte, aber interaktive
ed.
sed eignet sich besonders, um
- mehrere globale Editierfunktionen effizient in einem Schritt durch-
zuführen,
- die Ausgabe eines Kommandos über eine Pipeline auf einfache Weise
zu editieren,
- eine Folge von Editierkommandos anzuwenden, die für die interaktive
Eingabe zu kompliziert ist.
sed liest Dateien sequentiell, bearbeitet die eingelesenen Zeilen ent-
sprechend den sed-Kommandos, die Sie in ein sed-Skript geschrieben
haben, und gibt die bearbeiteten Zeilen auf die Standardausgabe aus.
sed liest das sed-Skript entweder von der Kommandoaufrufzeile oder aus
einer Datei. Die Eingabedateien bleiben unverändert. Wenn Sie die
Änderungen sichern möchten, lenken Sie die Standardausgabe in eine
Datei um.
OPTIONEN
-n unterdrückt die standardmäßig erfolgende Ausgabe jeder bearbeite-
ten Eingabezeile auf die Standardausgabe (siehe Beispiel 6).
-n nicht angegeben:
sed gibt jede bearbeitete Eingabezeile auf die Standardausgabe
aus. Ob die Zeile bei der Bearbeitung verändert wurde oder nicht,
hängt von den Kommandos im sed-Skript ab. Die Zeilen werden also
auch ausgegeben, wenn im sed-Skript kein Ausgabekommando, wie
z. B. p steht. Eingabezeilen, die mit einem Ausgabekommando, wie
z. B. p bearbeitet werden, werden zweimal nacheinander ausgege-
ben. Die erste Ausgabe erfolgt als standardmäßige Ausgabe aller
bearbeiteten Zeilen. Die zweite Ausgabe erfolgt wegen der spe-
ziellen Bearbeitung, die in diesem Fall die Ausgabe bewirkt.
[-e] skript
sed liest das sed-Skript skript, mit dem die Eingabedatei bear-
beitet werden soll, von der Kommandoaufrufzeile. Wenn skript
Leerzeichen, Neue-Zeile-Zeichen oder Shell-Sonderzeichen enthält,
müssen Sie das Kommando in Hochkommas einschließen: 'skript'
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
Sie können -e skript mehrmals und auch zusammen mit -f skriptda-
tei angeben. sed liest dann die sed-Kommandos aus allen angegebe-
nen sed-Skripts.
Enthält die Kommandoaufrufzeile nur einmal die Option -e und
nicht die Option -f, können Sie skript auch ohne -e angeben. Nach
skript dürfen dann keine Optionen und kein -- mehr angegeben wer-
den.
-f skriptdatei
sed liest das sed-Skript, mit dem die Eingabedatei bearbeitet
werden soll, aus der Datei skriptdatei.
Sie können -f skriptdatei mehrmals und auch zusammen mit -e
skript angeben. sed liest dann die sed-Kommandos aus allen ange-
gebenen sed-Skripts.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei mit -
beginnt oder wenn skript mit - beginnt und -e nicht angegeben
wurde.
datei
Name der Datei, deren Inhalt sed bearbeiten soll. Sie können nur
Text-Dateien mit sed bearbeiten.
datei nicht angegeben: sed liest von der Standardeingabe.
Arbeitsweise
sed arbeitet jeweils mit Kopien der Eingabezeilen. Sie werden nachein-
ander in den sogenannten Musterspeicher kopiert.
Normalerweise bearbeitet sed die Eingabezeilen in folgendem Zyklus:
1. Schritt: Die nächste (am Dateianfang die erste) Eingabezeile wird
in den Musterspeicher kopiert.
2. Schritt: Alle sed-Kommandos im sed-Skript, welche die zuletzt in
den Musterspeicher kopierte Zeile adressieren, werden
nacheinander auf den Inhalt des Musterspeichers ange-
wandt. Abhängig von den sed-Kommandos wird dabei der
Inhalt des Musterspeichers verändert oder auch nicht.
3. Schritt: Der bearbeitete Inhalt des Musterspeichers wird auf die
Standardausgabe ausgegeben, und der Musterspeicher wird
gelöscht.
Dieser Zyklus wird solange durchlaufen, bis das Ende der Eingabe
erreicht ist.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
Der Musterspeicher kann manchmal auch mehrere Zeilen enthalten (siehe
sed-Kommandos g, G, N). Als Adresse des Musterspeichers gilt jedoch
immer die Adresse der zuletzt in den Musterspeicher kopierten Zeile.
Einige sed-Kommandos (g, G, h, H) benutzen zusätzlich einen sogenann-
ten Haltespeicher, in dem der Inhalt des Musterspeichers vollständig
oder teilweise zur späteren Wiederverwendung gespeichert wird.
Format eines sed-Skripts
Ein sed-Skript besteht aus Kommandozeilen der Form:
[bereich]sed-Kommando[parameter ...]
oder
[bereich]{sed-Kommando[parameter ...]
sed-Kommando[parameter ...]
.
.
.
}
Die geschweiften Klammern müssen Sie nur angeben, wenn Sie bereich
angeben.
Die schließende geschweifte Klammer } muß an einem Zeilenanfang ste-
hen, d. h. es dürfen ihr nur Leerzeichen oder Tabulatorzeichen voran-
gehen.
Zwischen bereich und sed-Kommando darf kein Leerzeichen stehen.
Mit bereich wählen Sie bestimmte Eingabezeilen aus. Wenn bereich den
Musterspeicher, d. h. die zuletzt in den Musterspeicher kopierte Ein-
gabezeile adressiert, wird das zugehörige sed-Kommando bzw. die sed-
Kommandoliste auf den Inhalt des Musterspeichers angewandt.
Sie können für bereich eine Adresse oder zwei durch ein Komma
getrennte Adressen angeben.
bereich = adresse
Jede zuletzt in den Musterspeicher kopierte Eingabezeile, die zu
adresse paßt, ist adressiert.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
bereich = adresse1,adresse2
Der Bereich von der durch adresse1 adressierten Eingabezeile bis
zu der durch adresse2 adressierten Eingabezeile, einschließlich
der Intervallgrenzen, ist adressiert. Adressiert adresse2 eine
Zeile, die in der Eingabedatei vor der mit adresse1 adressierten
Zeile liegt, gilt nur adresse1.
bereich nicht angegeben:
Jede zuletzt in den Musterspeicher kopierte Eingabezeile ist adres-
siert.
Adressen
______________________________________________________________________
| Adresse | Bedeutung |
|__________|__________________________________________________________|
| $ | letzte Zeile der Datei |
|__________|__________________________________________________________|
| n | n-te Eingabezeile, wobei n eine positive ganze Zahl ist.|
| | Die Nummern ergeben sich, indem alle Eingabezeilen fort-|
| | laufend durchnumeriert werden. |
|__________|__________________________________________________________|
| /muster/ | Eingabezeile, die eine zu muster passende Zeichenkette |
| | enthält. Wenn muster selbst einen Schrägstrich enthält, |
| | muß er mit einem Gegenschrägstrich \ davor entwertet |
| | werden. muster ist ein einfacher regulärer Ausdruck |
| | [siehe expressions(5)] mit folgenden Änderungen: |
| | |
| | Die Angabe \?regulärerausdruck?, wobei ? ein beliebiges|
| | Zeichen ist, ist gleichbedeutend mit |
| | /regulärerausdruck/. Dabei steht ein mit einem Gegen- |
| | schrägstrich \ entwertetes ? für sich selbst, begrenzt |
| | also nicht den regulären Ausdruck. Zum Beispiel steht |
| | die Adresse \xabc\xdefx für die Zeichenkette: abcxdef |
| | |
| | Die Escape-Sequenz \n paßt zum Neue-Zeile-Zeichen im |
| | Musterspeicher. |
| | |
| | Ein Punkt paßt zu jedem Zeichen außer dem letzten Neue- |
| | Zeile-Zeichen im Musterspeicher. |
|__________|__________________________________________________________|
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
sed-Kommandos
Im folgenden sind die sed-Kommandos in alphabetischer Reihenfolge
beschrieben. Die eckigen Klammern [ ] sind dabei nicht einzugeben! Sie
zeigen lediglich an, daß die dazwischen eingeschlossene Adreßangabe
fakultativ ist.
Das Argument text besteht aus einer oder mehreren Zeilen, von denen
alle bis auf die letzte mit einem Gegenschrägstrich \ enden müssen, um
das anschließende Neue-Zeile-Zeichen zu entwerten.
[adresse]a\
text
(a - append) Im Anschluß an die Ausgabe des Inhalts des Muster-
speichers wird text ausgegeben.
[bereich]b[marke]
(b - branch) Im sed-Skript wird zu dem sed-Kommando :marke ver-
zweigt.
marke nicht angegeben: Es wird ans Ende des sed-Skripts ver-
zweigt.
[bereich]c\
text
(c - change) Der adressierte Bereich wird gelöscht, wenn er im
Musterspeicher ist, text wird ausgegeben und der nächste Zyklus
wird gestartet.
[bereich]d
(d - delete) Der Inhalt des Musterspeichers wird gelöscht und der
nächste Zyklus wird gestartet. Der 3. Schritt, die Ausgabe des
Inhalts des Musterspeichers, entfällt.
[bereich]D
(d - delete) Der Inhalt des Musterspeichers wird vom Anfang bis
zum ersten Neue-Zeile-Zeichen gelöscht und der nächste Zyklus
wird gestartet.
[bereich]g
Der Inhalt des Haltespeichers ersetzt den Inhalt des Musterspei-
chers.
[bereich]G
Der Inhalt des Haltespeichers wird an den Musterspeicher ange-
fügt.
[bereich]h
Der Inhalt des Musterspeichers ersetzt den Inhalt des Haltespei-
chers.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
[bereich]H
Der Inhalt des Musterspeichers wird an den Haltespeicher ange-
fügt.
[adresse]i\
text
(i - insert) text wird vor dem Inhalt des Musterspeichers ausge-
geben.
[bereich]l
(l - list) Der Inhalt des Musterspeichers wird auf die Standard-
ausgabe ausgegeben, wobei nicht-druckbare Zeichen durch Ersatz-
Zeichen (z. B. Tabulatorzeichen; siehe ed-Kommando l) oder als
Oktalzahlen in der Form \nn dargestellt werden. Überlange Zeilen
mit mehr als 71 Zeichen werden auf zwei oder mehr Zeilen unter-
teilt. Ein Gegenschrägstrich \ am Ende einer Bildschirmzeile
zeigt an, daß die Textzeile in der nächsten Bildschirmzeile fort-
gesetzt wird. Jedes Zeilenende wird mit $ gekennzeichnet.
[bereich]n
(n - next) Der Inhalt des Musterspeichers wird auf die Standard-
ausgabe ausgegeben und durch die nächste Eingabezeile ersetzt.
Die Adresse der eingegebenen Zeile wird zur Adresse des Muster-
speichers.
[bereich]N
Die nächste Eingabezeile wird einschließlich des Neue-Zeile-
Zeichens an den Inhalt des Musterspeichers angefügt. Die Adresse
der letzten angefügten Zeile wird zur Adresse des Musterspei-
chers.
[bereich]p
(p - print) Der Inhalt des Musterspeichers wird auf die Standard-
ausgabe ausgegeben. Nicht druckbare Zeichen werden nicht darge-
stellt.
[bereich]P
(p - print) Der Anfang des Musterspeichers wird bis zum ersten
Neue-Zeile-Zeichen einschließlich auf die Standardausgabe ausge-
geben. Nicht druckbare Zeichen werden nicht dargestellt.
[adresse]q
(q - quit) sed wird beendet. Haben Sie mehrere sed-Skripts ange-
geben, wird sed beim ersten q beendet, das in irgendeinem der
Skripts steht.
[bereich]r rdatei
(r - read) Der Inhalt der Datei rdatei wird gelesen und vor dem
Kopieren der nächsten Eingabezeile in den Musterspeicher auf die
Standardausgabe ausgegeben. rdatei muß, durch genau ein Leerzei-
chen vom sed-Kommando r getrennt, am Ende der Kommandozeile ste-
hen.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
[bereich]s/rA/ersetzungszeichenkette/[parameter]
(s - substitute) Zeichenketten im Musterspeicher, zu denen der
reguläre Ausdruck rA paßt, werden durch ersetzungszeichenkette
ersetzt. Für rA können Sie einfache reguläre Ausdrücke angeben
[siehe expressions(5)]. Als Trennzeichen können Sie außer dem
Schrägstrich / jedes beliebige Zeichen verwenden. Nähere Informa-
tionen siehe ed-Kommando s.
parameter
n (n - number) Nur die n-te zu rA passende Zeichenkette in
einer Zeile wird durch ersetzungszeichenkette ersetzt.
g (g - global) Alle zu rA passenden Zeichenketten in einer
Zeile werden durch ersetzungszeichenkette ersetzt.
p (p - print) Der Inhalt des Musterspeichers wird auf die
Standardausgabe ausgegeben, falls eine Ersetzung durchge-
führt wurde, auch wenn sed mit Option -n aufgerufen wurde.
w wdatei
(w - write) Der Inhalt des Musterspeichers wird in die Datei
wdatei geschrieben, falls eine Ersetzung durchgeführt wurde.
Der Inhalt einer bereits vor dem sed-Aufruf existierenden
Datei mit dem Namen wdatei wird überschrieben. Wenn inner-
halb eines sed-Skripts mehrere w-Kommandos in dieselbe Datei
wdatei schreiben, wird der Inhalt des Musterspeichers
jeweils an den Inhalt von wdatei angehängt. wdatei muß,
durch genau ein Leerzeichen vom sed-Kommando w getrennt, am
Ende der Kommandozeile stehen. In einem sed-Aufruf dürfen
Sie maximal 10 verschiedene Dateien für wdatei verwenden.
Vorsicht: Wenn Sie für wdatei den Namen Ihrer Eingabedatei
angeben, zerstören Sie diese!
parameter nicht angegeben:
Nur die erste zu rA passende Zeichenkette einer Zeile wird durch
ersetzungszeichenkette ersetzt.
[bereich]tmarke
(t -test) Im sed-Skript wird zu dem sed-Kommando :marke ver-
zweigt, falls seit dem letzten Kopieren einer Eingabezeile in den
Musterspeicher oder dem letzten Aufrufen eines t-Kommandos eine
Ersetzung durchgeführt wurde.
marke nicht angegeben: Im sed-Skript wird ans Ende gesprungen.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
[bereich]w wdatei
(w - write) Der Inhalt des Musterspeichers wird in die Datei
wdatei geschrieben. Der Inhalt einer bereits vor dem sed-Aufruf
existierenden Datei mit dem Namen wdatei wird überschrieben. Wenn
innerhalb eines sed-Skripts mehrere w-Kommandos in dieselbe Datei
wdatei schreiben, wird der Inhalt des Musterspeichers jeweils an
den Inhalt von wdatei angehängt. wdatei muß, durch genau ein
Leerzeichen vom sed-Kommando w getrennt, am Ende der Kommando-
zeile stehen. In einem sed-Aufruf dürfen Sie maximal 10 verschie-
dene Dateien für wdatei verwenden.
Vorsicht: Wenn Sie für wdatei den Namen Ihrer Eingabedatei ange-
ben, zerstören Sie diese!
[bereich]x
(x - exchange) Der Inhalt des Muster- und Haltespeichers wird
ausgetauscht.
[bereich]y/zeichenkette1/zeichenkette2/
Jedes Vorkommen eines Zeichens aus zeichenkette1 wird durch das
entsprechende Zeichen aus zeichenkette2 ersetzt. zeichenkette1
und zeichenkette2 müssen gleich lang sein und explizit angegeben
werden. Reguläre Ausdrücke können nicht verwendet werden.
[bereich]!kommando
kommando ist ein sed-Kommando oder eine in geschweiften Klammern
{...} eingeschlossene sed-Kommandoliste und wird auf alle Zeilen
angewandt, die nicht durch bereich adressiert sind.
:marke
Dieses Kommando setzt im Skript die marke, die von den Kommandos
b und t angesprungen werden kann. Für marke können Sie bis zu 8
Zeichen angeben.
[adresse]=
Die aktuelle Zeilennummer wird auf die Standardausgabe in einer
eigenen Zeile ausgegeben.
[bereich]{sed-Kommando
sed-Kommando
.
.
.
}
Die in geschweiften Klammern {...} eingeschlossenen sed-Kommandos
werden nacheinander ausgeführt, wenn bereich den aktuellen
Musterspeicher adressiert. Die schließende Klammer } muß am Zei-
lenanfang stehen. Es dürfen ihr nur Leerzeichen und Tabulatorzei-
chen vorausgehen.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
<RETURN>
Das Neue-Zeile-Zeichen gilt als leeres Kommando und wird igno-
riert. Sie können so Ihre sed-Skripts durch Leerzeilen übersicht-
lich gliedern.
# Steht in einer Skriptdatei als erstes Zeichen in einer Zeile ein
#, wird der darauffolgende Zeileninhalt als Kommentar interpre-
tiert.
#n Steht in einer Skriptdatei als erstes Zeichen ein #n, wird die
standardmäßige Ausgabe des Musterspeichers unterdrückt (ent-
spricht der Option -n). Der auf #n folgende Zeileninhalt wird als
Kommentar gewertet und nicht als sed-Kommando interpretiert.
FEHLERMELDUNGEN
sed: command garbled: ...
Das sed-Skript enthält einen Syntaxfehler. Nach dem Doppelpunkt wird
die Stelle aus dem Skript ausgegeben, an der sich sed beendet hat.
Can't open datei
Sie haben eine Eingabedatei angegeben, die nicht existiert oder für
die Sie kein Leserecht besitzen.
Unrecognized command: ...
Das sed-Skript enthält ein unbekanntes Kommando.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
In geklammerten regulären Ausdrücken bestimmt die Umgebungsvariable
LCCOLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und
Zeicheneinheiten, die Umgebungsvariable LCCTYPE die Bedeutung von
Zeichenklassen. LCCTYPE bestimmt zusätzlich, welche Zeichen bei Ver-
wendung des Kommandos l als nichtdruckbar betrachtet werden.
Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
chenkette definiert ist, wird der Wert von LANG als Standardwert für
die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
BEISPIELE
Beispiel 1
In alle Leerzeilen einer Datei die Zeichenkette XXXXX schreiben und
die Ausgabe in eine andere Datei umlenken:
$ sed '/^$/s/^/XXXXX/' datei > dateineu
Mit /^$/ sind alle Leerzeilen adressiert, d. h. Zeilen, in denen zwi-
schen Zeilenanfang und Zeilenende nichts, auch kein Leerzeichen,
steht. sed sucht nach dem Zeilenanfang ^ und ersetzt ihn durch die
Zeichenkette XXXXX.
Beispiel 2
Alle Zeilen einer Datei, die mit einer Ziffer beginnen, um 4 Leerzei-
chen einrücken und die Ausgabe in eine andere Datei umlenken:
$ sed '/^[0-9]/s/^/<blank><blank><blank><blank>/' datei > dateineu
Mit /^[0-9]/ sind alle Zeilen adressiert, in denen am Zeilenanfang
eine Ziffer von 0 bis 9 einschließlich steht. sed sucht nach dem Zei-
lenanfang ^ und ersetzt ihn durch 4 Leerzeichen
<blank><blank><blank><blank>, d. h. verschiebt den bisherigen Zeilen-
inhalt um 4 Positionen nach rechts und füllt Position 1 bis 4 mit
Leerzeichen.
Beispiel 3
Alle Zeilen einer Datei ausgeben, die keine Leerzeilen sind:
$ sed '/^$/d' datei
Alle Leerzeilen werden mit /^$/ adressiert und mit d gelöscht.
Beispiel 4
Alle Zeilen einer Datei mit jeweils einer Leerzeile dazwischen ausge-
ben:
$ sed 's/$/\ <CR>
> /' datei
Da keine Adresse angegeben ist, sucht sed in jeder Zeile nach dem Zei-
lenende $ und ersetzt es durch ein Neue-Zeile-Zeichen <CR>, d. h. es
wird ein zusätzliches Neue-Zeile-Zeichen eingefügt.
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
Beispiel 5
Ausgeben der zweiten und dritten Spalte einer Datei, deren Spalten
jeweils durch einen Doppelpunkt voneinander getrennt sind. Die dritte
Spalte soll vor der zweiten ausgegeben werden:
$ sed 's/[^:]*:\([^:]*\):\([^:]*\):.*/\2:\1/' datei
Erläuterung:
s/ / /
In jeder Zeile wird die Zeichenkette zwischen dem ersten und
zweiten Schrägstrich gesucht und ersetzt durch die Zeichenkette
zwischen dem zweiten und dritten Schrägstrich.
[^:]*
Beliebig viele (*) Zeichen außer Doppelpunkt ([^:]).
: Doppelpunkt.
\( \)
Klammerung eines Teilausdrucks, der in der Ersetzungszeichenkette
zwischen dem zweiten und dritten Schrägstrich wiederverwendet
werden soll.
\2 Die Ersetzungszeichenkette soll mit dem in der zweiten Klammer
\(...\) stehenden Teilausdruck beginnen.
: Zwischen dem ersten und zweiten Teilausdruck in der Ersetzungs-
zeichenkette soll ein Doppelpunkt stehen.
\1 Die Ersetzungszeichenkette soll mit dem in der ersten Klammer
\(...\) stehenden Teilausdruck enden.
Beispiel 6
Aus der Datei pers alle Berufe herausfiltern und mit einer neuen Über-
schrift in die Datei berufe schreiben. Voraussetzung für das folgende
Beispiel ist, daß die erste Zeile der Eingabedatei keinen Suchbegriff,
in diesem Fall "Beruf:" enthält.
Die Datei pers hat folgenden Aufbau:
Name: Hans Mueller
Familienstand: geschieden
Beruf: Journalist
Name: Karin Becker
Familienstand: verheiratet
Beruf: Programmiererin
usw.
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
sed-Programm:
$ sed -n '1{s/^.*/Berufe:/
h
}
/^Beruf:/{s/^Beruf: *\(.*\)/\1/
H
}
${g
p
}' pers > berufe
$ cat berufe
Berufe:
Journalist
Programmiererin
usw.
$
Erläuterung:
Zeile 1 im Musterspeicher wird ersetzt durch die Zeichenkette Berufe:
und dann mit h in den Haltespeicher geschrieben.
Jede Zeile im Musterspeicher, die mit Beruf: beginnt, wird ersetzt
durch die Zeichenkette, die jeweils darauf folgt und mit H an den Hal-
tespeicher angefügt.
Die letzte Zeile der Datei im Musterspeicher ($) wird mit g ersetzt
durch den gesamten Inhalt des Haltespeichers. Mit p wird der Inhalt
des Musterspeichers ausgegeben.
Die Option -n sorgt dafür, daß die in den Musterspeicher kopierten
Eingabezeilen nach ihrer Bearbeitung nicht automatisch auf die Stan-
dardausgabe geschrieben werden. Nur der mit dem sed-Kommando p bear-
beitete Inhalt des Musterspeichers wird ausgegeben.
Beispiel 7
Die Datei protocol hat folgenden Inhalt:
First Line
RCS file: RCS/awk,v; Working file: awk
head: 1.8
locks: ; strict
symbolic names: Y4A0010: 1.8; N4A0010: 1.8; Y3C1001: 1.7;
comment leader: "# "
total revisions: 8; selected revisions: 8
----------------------------
Last Line
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
Mit einem sed-Skript namens cutoff sollen
1) alle Zeilen zwischen der Zeile First Line und der Zeile Last Line
entfernt werden;
2) vor die Zeile First Line eine neue Zeile BEGIN eingesetzt werden;
3) nach der Zeile Last Line eine neue Zeile END angehängt werden.
Das Skript cutoff hat folgenden Inhalt:
#!/usr/bin/ksh
# Call: cutoff $1
f=$1
echo $f
{
sed '/^RCS *\(.*\)/,/^----------------------------/d
/^First Line/i\
BEGIN
/^Last Line/a\
END
' $f
} > $f.out
mv $f.out $f
Erläuterung:
Die Anweisung
/^RCS *\(.*\)/,/^----------------------------/d
markiert den Bereich, der gelöscht werden soll. Er beginnt mit einer
Zeile, die mit RCS beginnt, gefolgt von beliebigen Zeichenketten [=
*\(.*\)]. Der zu löschende Bereich endet mit der Zeile, die mit der
Zeichenkette ---------------------------- anfängt. Diese beiden Zeilen
sowie alle Zeilen, die dazwischen liegen, werden gelöscht (delete).
Die Anweisung
/^First Line/i\
BEGIN
setzt vor eine Zeile, die mit First Line beginnt, eine Zeile mit der
Zeichenkette BEGIN ein (insert).
Die Anweisung
/^Last Line/a\
END
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
sed(1) sed(1)
fügt nach einer Zeile, die mit Last Line beginnt, eine Zeile mit der
Zeichenkette END an (add).
Nachdem das Skript cutoff ausgeführt worden ist, hat die Datei
protocol folgenden Inhalt:
BEGIN
First Line
Last Line
END
SIEHE AUCH
awk(1), ed(1), grep(1), expressions(5).
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98