Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

ed - Zeilenorientierter Editor im Dialogbetrieb

&pagelevel(4)&pagelevel

(interactive line editor)


ed ist ein interaktiver zeilenorientierter Editor. Mit Hilfe von ed-Skripts (siehe Arbeiten mit ed-Skripts) können Sie bequem mehrere Dateien mit derselben Kommandofolge bearbeiten.
ed verarbeitet die Ausgabe des Kommandos diff -e (siehe diff).


Syntax


ed[ -| -s][ -p zeichenkette][ datei]

- | -s

Die Option -s entspricht der alten Option -, die weiterhin unterstützt wird.

Die Option -s unterdrückt die folgenden standardmäßigen Ausgaben:

  • Anzahl der verarbeiteten Zeichen bei den ed-Kommandos
    e (edit - editieren)
    r (read - lesen)
    w (write - schreiben)

  • Fragezeichen ?, das vor versehentlichem Löschen des Pufferinhalts warnt, bei den ed-Kommandos
    e (edit - editieren)
    q (quit - verlassen)

  • Ausrufezeichen ! als Bereitzeichen von ed nach einem !-Kommando.

-p zeichenkette

Mit zeichenkette können Sie die Bereitzeichenkette definieren, die ed im Kommandomodus ausgibt. Für zeichenkette können Sie ein oder mehrere Zeichen angeben.

-p zeichenkette nicht angegeben:
ed gibt keine Bereitzeichenkette aus.

datei

Name der Datei, die Sie bearbeiten möchten. ed kopiert die Datei in den internen Puffer und speichert datei als aktuellen Dateinamen.

datei nicht angegeben:
Sie beginnen in einem leeren Puffer zu arbeiten und bestimmen erst beim Schreiben des Pufferinhalts mit dem Kommando w datei (write - schreiben) in eine Datei deren Namen.

ed-Puffer

Beim Aufruf von ed wird ein Puffer eröffnet.

Wenn Sie keine Datei angegeben haben, ist der Puffer leer. Sie füllen ihn während Ihrer Editorsitzung mit Text.

Wenn Sie eine Datei angegeben haben, wird eine Kopie dieser Datei in den Puffer eingelesen. Den Text im Puffer bearbeiten Sie während Ihrer Editorsitzung.

Bevor Sie den Editor wieder verlassen, müssen Sie entscheiden, ob Sie den neu erstellten oder geänderten Pufferinhalt sichern, d.h. in eine Datei schreiben möchten.

Möchten Sie den Pufferinhalt sichern, schreiben Sie den Pufferinhalt mit dem Kommando w[ datei] (write - schreiben) in die angegebene Datei (Standard: die beim Aufruf von ed angegebene) zurück und verlassen dann den Editor mit einem der Kommandos q (quit - verlassen), Q (Quit - verlassen) oder mit CTRL+D.

Möchten Sie den Pufferinhalt nicht sichern, können Sie mit Q oder zweimal q den Editor verlassen, ohne vorher den Pufferinhalt mit w zurückzuschreiben. Nach der ersten Eingabe von q gibt ed als Warnung vor versehentlichem Löschen des Pufferinhalts ein ? aus. Gelöscht wird der Pufferinhalt erst, wenn Sie dann ein zweites Mal q eingeben. Statt des zweiten q können Sie auch Q oder CTRL+D eingeben.

Arbeitsmodi

Der ed bietet Ihnen zwei Arbeitsmodi: den Kommandomodus und den Eingabemodus. Nach dem Aufruf mit ed[ datei] befindet sich ed im Kommandomodus. Im Kommandomodus geben Sie i.a. ein Kommando in einer Zeile an und schließen es mit der Eingabetaste ab.

Den Eingabemodus schalten Sie ein mit einem der Kommandos


a (append - anfügen)
i (insert - einfügen)
c (change - verändern)


(siehe unten, ed-Kommandos).


Im Eingabemodus werden alle folgenden Eingabezeichen, auch nicht-druckbare Zeichen (wie z.B. die Tastencodes der Schreibmarkentasten), in die Arbeitskopie im Puffer geschrieben. Im Eingabemodus erkennt ed keine Kommandos. Sie können für den Kommandomodus ein Bereitzeichen definieren (siehe Option -p und ed-Kommando P) und erkennen dann sofort, in welchem Modus Sie gerade arbeiten. Verlassen können Sie den Eingabemodus mit einem Punkt (.) in der ersten Spalte oder mit CTRL+D. CTRL+D bewirkt generell, dass ed alle Eingaben seit der letzten Betätigung der Eingabetaste ignoriert und ein ? als Warnung ausgibt.

Kommandostruktur

Für ed existiert zu jedem Zeitpunkt eine aktuelle Zeile. Die aktuelle Zeile ist in der Regel die zuletzt durch ein Kommando bearbeitete Zeile. Auf diese aktuelle Zeile beziehen sich die Kommandos immer dann, wenn Sie vor den Kommandos keine anderen Adressen angeben.

Die meisten ed-Kommandos haben folgende Struktur:

[bereich]ed-kommando[parameter...]

bereich

Mit bereich wählen Sie die Zeilen im Puffer aus, auf die das ed-Kommando angewendet werden soll. Für bereich können Sie eine oder zwei Adressen angeben:

bereich = adresse

Die durch adresse bezeichnete Zeile gilt als ausgewählt.

bereich = adresse1,adresse2

adresse1,adresse2 kennzeichnen den Bereich zwischen den angegebenen Intervallgrenzen einschließlich. Die Suche nach beiden Adressen beginnt in der aktuellen Zeile. Verändert wird die aktuelle Zeile erst bei der Ausführung von Kommandos.
adresse2 muss sich auf eine Zeile im Puffer beziehen, die hinter der mit adresse1 bezeichneten Zeile liegt, sonst meldet ed einen Fehler.

bereich = adresse1;adresse2

adresse1;adresse2 kennzeichnen den Bereich zwischen den angegebenen Intervallgrenzen einschließlich. Die Suche nach adresse1 beginnt in der aktuellen Zeile. Die mit adresse1 bezeichnete Zeile wird dann zur neuen aktuellen Zeile, dann erst wird adresse2 ermittelt. Sie können so die Zeile festlegen, bei der ein Suchvorgang in Vor- und Rückwärtsrichtung beginnen soll, siehe Adressen, // und /rA/  unten.
adresse2 muss sich auf eine Zeile im Puffer beziehen, die hinter der mit adresse1 bezeichneten Zeile liegt, sonst meldet ed einen Fehler.

bereich nicht angegeben:
ed nimmt die zum jeweiligen Kommando gehörige Standard-Adresse an; diese ist bei jedem ed-Kommando beschrieben.

Benötigt ed keine Adresse und haben Sie trotzdem eine angegeben, meldet ed einen Fehler.

Haben Sie mehr Adressen angegeben als das Kommando erlaubt, nimmt ed die letzten.

Adressen

Adressen konstruieren Sie folgendermaßen:

AdresseBedeutung

. aktuelle Zeile
$ letzte Zeile
n n-te Zeile
'xdie mit dem Buchstaben x markierte Zeile. x muss ein Kleinbuchstabe sein (siehe k).
/rA/ Ein einfacher regulärer Ausdruck rA in /.../ eingeschlossen (siehe "Reguläre Ausdrücke der POSIX-Shell"), adressiert die erste Zeile, die eine zu dem regulären Ausdruck passende Zeichenkette enthält. Es wird dabei von der aktuellen Zeile aus vorwärts gesucht. Findet ed keine passende Zeile, setzt ed die Suche am Dateianfang fort und sucht wieder bis zur aktuellen Zeile. Enthält der reguläre Ausdruck rA selbst eines der Begrenzungszeichen / oder ?, muss es mit \ entwertet werden. Die Zeichen \n in einem regulären Ausdruck erzielen bei Neue-Zeile-Zeichen im durchsuchten Text keinen Treffer! Ein regulärer Ausdruck kann in bereich nur einmal vorkommen, z.B. adressiert /rA1/,/rA2/ nur die erste zu /rA2/ passende Zeile.
// Ein leerer regulärer Ausdruck // adressiert die Zeile, die zu dem zuletzt angegebenen regulären Ausdruck passt.
?rA? Wie /rA/, aber es wird von der aktuellen Zeile aus rückwärts in Richtung Dateianfang gesucht. Enthält der reguläre Ausdruck rA selbst eines der Begrenzungszeichen / oder ?, muss es mit \ entwertet werden.
adr[+]nn-te Zeile nach der durch adr bezeichneten Zeile.
adr[-]nn-te Zeile vor der durch adr bezeichneten Zeile.
+nn Zeilen nach der aktuellen Zeile.
-nn Zeilen vor der aktuellen Zeile.
[adr]+...
[adr]- ...
Eine Zeile nach (+) bzw. vor (-) der durch adr bezeichneten Zeile. Jedes Vorkommen von + erhöht die Adressangabe um 1, - erniedrigt die Adressangabe um 1. Die Adressangabe ++ adressiert also die zweite Zeile nach der aktuellen Zeile.
, Ein Komma , ist gleichbedeutend mit dem Adressenpaar 1,$, wenn ein Kommando folgt, sonst wird die letzte Zeile ausgegeben.
; Ein Strichpunkt ; ist gleichbedeutend mit dem Adressenpaar .,$, wenn ein Kommando folgt, sonst wird die letzte Zeile ausgegeben.

Kommandos

Die folgende Liste enthält eine systematische Übersicht aller ed-Kommandos, die Sie im Kommandomodus eingeben können. Die daran anschließende ausführliche Kommandobeschreibung ist alphabetisch geordnet.

Eingabemodus einschalten

a (append)

anfügen

c (change)

löschen und ersetzen

i (insert)

einfügen

Bereitzeichen im Kommandomodus ausgeben

P (prompt)

Bereitzeichen * ausgeben

Kommandos rückgängig machen

u (undo)

rückgängig machen

Kommandos abbrechen

CTRL+D 

abbrechen

Fehler erläutern

h (help)

letzte Fehlermeldung erläutern

H (Help)

Hilfemodus ein-/ausschalten. Bei jeder Fehleranzeige in Form eines Fragezeichens ? wird bei eingeschaltetem Hilfemodus eine Fehlermeldung ausgegeben (siehe Fehler).

Text ändern

a (append)

anfügen

c (change)

löschen und ersetzen

d (delete)

löschen

i (insert)

einfügen

Zeilen ausgeben

p (print)

ausgeben

l (list)

ausgeben mit nicht-druckbaren Zeichen in Ersatzdarstellung oder als Oktalzahlen

adresse

adressierte Zeile ausgeben

adresse +zahl

adressierte Zeile ausgeben

n (number)

Zeilen nummerieren und ausgeben

Eingabetaste 

Zeile hinter aktueller Zeile ausgeben

Zeilennummern ausgeben

adresse=

Nummer der adressierten Zeile ausgeben

n (number)

Zeilen nummerieren und ausgeben

Zeilenbereiche verschieben

t (transfer)

kopieren von Zeilen

m (move)

verschieben von Zeilen

Textmuster suchen und ersetzen

s (substitute)

suchen und ersetzen

Zeilen verbinden

j (join)

aufeinanderfolgende Zeilen verbinden

Zeilen markieren

k (mark)

Zeilen markieren

Ausgewählte Zeilen mit Kommandos bearbeiten

g (global)

Kommandoliste global für alle Zeilenausführen, die zu /rA/ passen

G (Global)

interaktiv Kommandoliste global für alle Zeilen ausführen, die zu /rA/ passen

v (vice-versa)

wie g, aber für alle Zeilen, die nicht zu /rA/ passen

V (Vice-Versa)

wie G, aber für alle Zeilen, die nicht zu /rA/ passen

Aktuellen Dateinamen ändern

f (file-name)

aktuellen Dateinamen ändern/ausgeben

Shell-Kommandos ausführen

!

Shell-Kommando aufrufen

Dateien in Puffer einlesen

e (edit)

Pufferinhalt löschen und neu einlesen

E (Edit)

Pufferinhalt ohne Warnung löschen und neu einlesen

r (read)

Datei in Puffer einlesen

Pufferinhalt sichern

w (write)

Pufferinhalt in Datei schreiben

W (write)

Pufferinhalt an Datei anfügen

Editor verlassen

q (quit)

ed verlassen

Q (Quit)

ed verlassen ohne Warnung

CTRL+C

ed verlassen

Beschreibung der ed-Kommandos

Die eckigen Klammern [] sind nicht einzugeben! Sie zeigen an, dass die dazwischen eingeschlossene Adressangabe fakultativ ist.
In der Regel darf in einer Zeile nur ein Kommando stehen. Jedoch können Sie an die Kommandos (mit Ausnahme von e, f, r und w) als Suffix l, n oder p anhängen, wenn die im folgenden unter den Kommandos l, n und p beschriebenen Funktionen ausgeführt werden sollen.


[adresse]a
text

(a - append)

liest den eingegebenen text und fügt ihn hinter der mit adresse adressierten Zeile an. Die aktuelle Zeile ist nun entweder die letzte Zeile des eingefügten Textes oder, falls Sie keinen Text eingegeben haben, die adressierte Zeile. Die Adresse 0 ist bei diesem Kommando erlaubt; der Text wird dann vor die erste Zeile des Puffers eingefügt. Über die Datensichtstation können Sie maximal 2048 Zeichen je Zeile einschließlich Neue-Zeile-Zeichen eingeben.

adresse nicht angegeben:
adresse = .

[bereich]c
text

(c - change)

löscht den angegebenen bereich und ersetzt ihn durch den eingegebenen text. Die aktuelle Zeile ist nun entweder die letzte Zeile des eingegebenen Textes oder, falls Sie keinen Text eingegeben haben, die Zeile vor den gelöschten Zeilen.

bereich nicht angegeben:
bereich = .,.

[bereich]d

(d - delete)

löscht den angegebenen bereich. Die Zeile hinter der letzten gelöschten Zeile wird zur aktuellen Zeile. Standen die gelöschten Zeilen am Ende des Puffers, wird die neue letzte Zeile die aktuelle Zeile.

bereich nicht angegeben:
bereich = .,.

e[ datei]

(e - edit)

löscht den gesamten Puffer und liest eine Kopie des Inhalts von datei ein. Ist der Pufferinhalt seit dem letzten Sichern oder Überschreiben verändert und nicht mit w gesichert worden, löscht ed den Pufferinhalt nicht sofort, sondern warnt Sie mit einem ? vor versehentlichem Löschen. Geben Sie daraufhin ein weiteres Mal e ein, wird der Pufferinhalt ohne weitere Warnung überschrieben. Die Anzahl der eingelesenen Bytes wird ausgegeben, wenn Sie ed nicht mit der Option -s aufgerufen haben. Die aktuelle Zeile ist die letzte Zeile des Puffers. Der Name datei wird gespeichert, so dass er später

bei den Kommandos e, r und w als aktueller Dateiname verwendet werden kann. Wenn Sie für datei ein Ausrufezeichen ! angeben, wird der Rest der Zeile als Shell-Kommando interpretiert. Das Ergebnis dieses Shell-Kommandos wird in den Puffer eingelesen. Ein mit ! eingeleitetes Shell-Kommando wird nicht als Dateiname gespeichert.

datei nicht angegeben:
datei = aktueller Dateiname

E[ datei]

(E - edit)

verhält sich wie edit, außer, dass es den Puffer ohne warnendes ? überschreibt, auch wenn der Inhalt des Puffers verändert und nicht gerettet wurde.

datei nicht angegeben:
datei = aktueller Dateiname

f[ datei]

(f - file)

setzt den aktuellen Dateinamen auf datei. Den aktuellen Dateinamen verwenden die Kommandos e, E, r und w.

datei nicht angegeben:
ed gibt den aktuellen Dateinamen aus.

[bereich]g/rA/kommandoliste

(g - global)

markiert im ersten Schritt alle Zeilen, die eine Zeichenkette enthalten, die zu rA passt. rA ist ein einfacher regulärer Ausdruck (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Dann wird die nächste markierte Zeile zur aktuellen Zeile und kommandoliste darauf angewandt.

Ein einzelnes Kommando oder das erste einer kommandoliste müssen Sie in dieselbe Zeile schreiben wie das Kommmando g. Alle Zeilen einer kommandoliste außer der letzten müssen Sie mit \ und Eingabetaste, die letzte mit Eingabetaste abschließen.

Die Kommandos a, i und c mit der dazugehörigen Eingabe text sind zugelassen. Auch Zeilen in text müssen Sie mit \ und Eingabetaste abschließen. Den die Eingabe normalerweise abschließenden Punkt . können Sie in der letzten Zeile der kommandoliste weglassen.

Eine leere kommandoliste entspricht dem Kommando p.

Die Kommandos g,G,v und V sind in der kommandoliste nicht zugelassen.

Nicht mit dem Kommando ! zu kombinieren!

bereich nicht angegeben:
bereich = 1,$

[bereich]G/rA/

(G - global)

G ist die interaktive Variante des Kommandos g. Zuerst wird jede Zeile markiert, die zu rA passt. rA ist ein einfacher regulärer Ausdruck (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Die erste der markierten Zeilen wird ausgegeben. Sie wird gleichzeitig zur aktuellen Zeile.

Sie haben nun die Möglichkeit, ein Kommando anzugeben, das ausgeführt werden soll. Hierbei darf es sich nicht um a, c, i, g, G, v oder V handeln. Nach der Ausführung dieses Kommandos wird die nächste markierte Zeile ausgegeben, usw.

Ein Neue-Zeile-Zeichen hat dieselbe Wirkung wie ein leeres Kommando. Wenn Sie das kommerzielle Und & eingeben, wird das Kommando wiederholt, das seit dem letzten Aufrufen von G als letztes ausgeführt wurde.

Mit Kommandos, die unter G aufgerufen werden, können beliebige Zeilen im Puffer adressiert und bearbeitet werden. G können Sie mit CTRL+C abbrechen.

bereich nicht angegeben:
bereich = 1,$

h

(h - help)

gibt eine kurze Fehlermeldung aus, die den Grund für das letzte Fragezeichen ? auf dem Bildschirm erklärt. Mögliche Fehlermeldungen siehe Fehler.

H

(H - help)

bewirkt, dass ed in einen Modus übergeht, in dem bei auftretenden Fehlern anstelle von ? erläuternde Fehlermeldungen ausgegeben werden. Auch das zuletzt ausgegebene ? wird, falls vorhanden, erläutert. Diesen Modus können Sie durch ein zweites Aufrufen von H ausschalten.
Standardmäßig ist der Modus H ausgeschaltet.
Mögliche Fehlermeldungen siehe Fehler.

[adresse]i
text

(i - insert)

fügt text vor der mit adresse adressierten Zeile ein. Die aktuelle Zeile ist nun entweder die letzte Zeile des eingefügten Textes oder, falls Sie keinen Text eingegeben haben, die adressierte Zeile. Dieses Kommando unterscheidet sich vom Kommando append nur durch die Positionierung des eingegebenen Textes. Adresse 0 ist nicht zulässig. Über eine Datensichtstation dürfen Sie maximal 2048 Zeichen einschließlich des Neue-Zeile-Zeichens je Zeile eingeben.

adresse nicht angegeben:
adresse = .

[bereich]j

(j - join)

verbindet alle in bereich liegenden Zeilen zu einer einzigen Zeile und löscht dabei die entsprechenden Neue-Zeile-Zeichen. Wenn Sie als Adresse nur eine Zeile angeben, geschieht nichts. Die neue Zeile wird zur aktuellen Zeile.

bereich nicht angegeben:
bereich = .,.

[adresse]kx

(k - mark)

markiert die mit adresse adressierte Zeile mit dem für x angegebenen Buchstaben, wobei x ein Kleinbuchstabe sein muss. Die Markierung wird aber nicht ausgegeben. Adressieren können Sie die markierte Zeile mit Hochkomma x (’x). Die aktuelle Zeile bleibt unverändert.

adresse nicht angegeben:
adresse = .

[bereich]l

(l - list)

gibt im Gegensatz zu p den angegebenen bereich wie folgt aus: Einige nichtdruckbare Zeichen werden Ersatzdarstellung (z.B. Tabulatorzeichen), die übrigen nicht-druckbaren Zeichen werden als Oktalzahlen ausgegeben; überlange Zeilen werden mehrzeilig ausgegeben, am Ende mit dem Zeilenfortsetzungszeichen \ versehen; jedes Zeilenende wird mit $ gekennzeichnet. Das Kommando l können Sie an jedes Kommando anhängen, mit Ausnahme von e, f, r und w.

Folgende Ersatzdarstellungen werden verwendet:


\\Backslash (zur Unterscheidung von Oktalzahlen)
\aWarnung, Klingel *)
\bBackspace, Rücksetzzeichen *)
\fForm Feed, Seitenvorschub
\nNewline, Neue-Zeile-Zeichen
\rCarriage Return, Wagenrücklauf
\tTabulator
\vVertikal-Tabulator *)


*)  Die so markierten Sonderzeichen werden nur auf Zeichenterminals unterstützt


bereich nicht angegeben:
bereich = .,.

[bereich]madresse

(m - move)

verschiebt den bereich hinter die mit adresse adressierte Zeile. Die letzte der verschobenen Zeilen wird die aktuelle Zeile. Wenn Sie für adresse den Wert 0 angeben, wird bereich ganz an den Anfang der Datei gesetzt. Liegt adresse innerhalb von bereich, gibt ed eine Fehlermeldung aus.

bereich nicht angegeben:
bereich = .,.

[bereich]n

(n - number)

gibt die mit bereich adressierten Zeilen aus, wobei an den Anfang jeder Zeile die Zeilennummer und ein Tabulatorzeichen gesetzt werden. Die zuletzt ausgegebene Zeile wird zur neuen Zeile. Das Kommando n können Sie an jedes Kommando anhängen, mit Ausnahme von e, f, r und w.

bereich nicht angegeben:
bereich = .,.

[bereich]p

(p - print)

gibt die mit bereich adressierten Zeilen aus. Nicht-druckbare Zeichen werden unverändert ausgegeben. Überlange Zeilen laufen ohne besondere Kennzeichnung auf der nächsten Zeile weiter, d.h. man kann sie nicht als solche erkennen. Die zuletzt ausgegebene Zeile wird zur aktuellen Zeile. Das Kommando p können Sie an jedes Kommando anhängen, mit Ausnahme von e, f, r und w. Mit dp wird also die aktuelle Zeile gelöscht und die neue aktuelle Zeile ausgegeben.

bereich nicht angegeben:
bereich = .,.

P

(P - prompt)

bewirkt, dass ed im Kommandomodus als Bereitzeichen den Stern * oder die Bereitzeichenkette (siehe Option -p) ausgibt. Diesen Modus können Sie durch einen zweiten Aufruf von P wieder ausschalten. Standardmäßig ist dieser Modus ausgeschaltet.

q

(q - quit)

beendet den ed. Ist der Pufferinhalt seit dem letzten Sichern oder Überschreiben verändert und nicht mit w gesichert worden, gibt ed als Warnung vor versehentlichem Löschen ein ? aus und wartet auf weitere Eingabe. Wenn Sie dann CTRL+D, Q oder zum zweitenmal q eingeben, beenden Sie den ed ohne weitere Warnung und ohne den Pufferinhalt gesichert zu haben.


Achtung!

Wenn Sie nach dem ersten q noch Aktionen durchführen, die den Pufferinhalt nicht verändern, beenden Sie mit dem zweiten q auch den ed ohne weitere Warnung und ohne Sicherung des Pufferinhalts.


Q

(Q - quit)

beendet den ed sofort ohne Warnung, auch wenn Sie den Pufferinhalt seit dem letzten Sichern oder Überschreiben verändert und nicht mit w gesichert haben.

[adresse]r[ datei]

(r - read)

liest datei und fügt ihren Inhalt hinter der mit adresse adressierten Zeile ein.Die Adresse 0 ist für dieses Kommando erlaubt.
Sie bewirkt, dass datei an den Anfang des Puffers geschrieben wird. Nach erfolgreichem Lesen wird die Anzahl der gelesenen Bytes ausgegeben, wenn Sie ed nicht mit der Option -s aufgerufen haben. Die aktuelle Zeile ist die letzte eingelesene Zeile. Der aktuelle Dateiname wird nicht auf datei gesetzt, es sei denn, Sie haben ed ohne Dateinamen aufgerufen und datei ist der erste seit dem Aufruf angesprochene Dateiname.

Wenn Sie für datei ein Ausrufezeichen ! angeben, dann wird der Rest der Zeile als Shell-Kommando interpretiert, ausgeführt und die Ausgabe davon eingelesen. Ein solches Kommando wird nicht als aktueller Dateiname gespeichert.

adresse nicht angegeben:
adresse = $

datei nicht angegeben:
datei = aktueller Dateiname

[bereich]s/rA/Ersetzungszeichenkette/[g][l][n][p][count]

(s - substitute)

durchsucht jede Zeile in bereich nach Zeichenketten, die zu rA passen. rA ist ein einfacher internationalisierter regulärer Ausdruck (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). In jeder so gefundenen Zeile wird die erste zu rA passende Zeichenkette durch Ersetzungszeichenkette ersetzt. Ist der Schalter g gesetzt, werden alle zu rA passenden Zeichenketten durch Ersetzungszeichenkette ersetzt.
Falls keine passende Zeichenkette gefunden wurde, meldet ed ein ? als Fehler.

Als Trennzeichen zwischen dem Kommando s, dem regulären Ausdruck rA und Ersetzungszeichenkette können Sie nicht nur den Schrägstrich / verwenden, sondern auch jedes andere beliebige Zeichen außer: Leerzeichen und Neue-Zeile-Zeichen. Das Zeichen wird dadurch als Trennzeichen definiert, dass es unmittelbar auf s folgt. Zur aktuellen Zeile wird die Zeile, auf der die letzte Ersetzung stattgefunden hat.


count

Ersetzt das count-te Auftreten des regulären Ausdrucks in einer Zeile.

g

Es wird nicht nur das erste Auftreten des rA, sondern es werden global alle alle nicht-überlappenden Vorkommen des rA ersetzt. Werden sowohl g als auch count angegeben, ist das Ergebnis undefiniert.

l

Die letzte Zeile, in der eine Ersetzung stattgefunden hat, wird auf die Standardausgabe im Format des ed-Kommandos l (list) geschrieben.

n

Die letzte Zeile, in der eine Ersetzung stattgefunden hat, wird auf die Standardausgabe im Format des ed-Kommandos n (number) geschrieben.

p

Die letzte Zeile, in der eine Ersetzung stattgefunden hat, wird auf die Standardausgabe im Format des ed-Kommandos p (print) geschrieben.


Sonderzeichen in der Ersetzungszeichenkette

Zeichen und Bedeutung


&wird durch die Zeichenkette ersetzt, die in der aktuellen Zeile zu dem regulären Ausdruck rA passt.
\mwird durch die Zeichenkette ersetzt, die zum m-ten in \(...\) eingeschlossenen regulären Unterausdruck von rA passt, wobei m eine einstellige Dezimalzahl ist. Bei durch Klammern ineinander geschachtelten Unterausdrücken wird m durch Zählen des Auftretens von \ von links nach rechts bestimmt.
%wird durch die Zeichenkette ersetzt, mit der beim zuletzt abgelaufenen s-Kommando ersetzt wurde, wenn Ersetzungszeichenkette nur aus dem Prozent-Zeichen % besteht.


Die Sonderbedeutung dieser Zeichen können Sie aufheben, indem Sie Ihnen jeweils einen Gegenschrägstrich \ voranstellen.


Zeile trennen in Ersetzungszeichenkette

Wenn Sie in Ersetzungszeichenkette ein Neue-Zeile-Zeichen haben möchten, müssen Sie es mit \ davor entwerten. Sie geben also \ vor der Eingabetaste ein. Ein solches Ersetzungskommando darf nicht Teil von kommandoliste der Kommandos g und v sein.


bereich nicht angegeben:
bereich = .,.

[bereich]ta

kopiert bereich hinter die angegebene Zeile a. Als Adresse für a ist 0 zugelassen. Zur aktuellen Zeile wird die letzte der kopierten Zeilen.

bereich nicht angegeben:
bereich = .,.

u

(u - undo)

macht das letzte Kommando rückgängig, mit dem der Inhalt des Puffers geändert wurde. Rückgängig machen können Sie die Kommandos a, c, d, g, i, j, m, r, s, t, v, G und V.

[bereich]v/rA/kommandoliste

(v - vice-versa)

bearbeitet alle Zeilen mit kommandoliste, die keine Zeichenkette enthalten, die zu rA passt. rA ist ein einfacher regulärer Ausdruck (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Bis auf diese Zeilenauswahl funktioniert v wie das Kommando g.

Nicht mit dem Kommando ! zu kombinieren!

bereich nicht angegeben:
bereich = 1,$

[bereich]V/rA/

(V - vice-versa)

ist die interaktive Variante des Kommandos v. Sie können mit V alle Zeilen bearbeiten, die keine Zeichenkette enthalten, die zu rA passt. rA ist ein einfacher internationalisierter regulärer Ausdruck (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Bis auf diese Zeilenauswahl funktioniert V wie das Kommando G.

bereich nicht angegeben:
bereich = 1,$

[bereich]w[ datei]

(w - write)

schreibt bereich in die datei. Der aktuelle Dateiname ändert sich nicht, falls er bereits gesetzt ist. Ist er nicht gesetzt, wird datei zum neuen aktuellen Dateinamen. Der alte Inhalt von datei wird dabei überschrieben. Existiert datei noch nicht, so wird sie angelegt. Die aktuelle Zeile bleibt unverändert. Nach erfolgreichem Schreiben wird die Anzahl der geschriebenen Bytes ausgegeben, vorausgesetzt, Sie haben den ed nicht mit der Option -s aufgerufen.

Wenn Sie für datei statt eines Dateinamens das Ausrufezeichen ! angeben, wird der Rest der Zeile als Shell-Kommando interpretiert und ausgeführt. bereich ist dann die Standard-Eingabe für das Shell-Kommando. Ein solches Kommando wird nicht als aktueller Dateiname gespeichert.

bereich nicht angegeben:
bereich = 1,$

datei = aktueller Dateiname

[bereich]W[ datei]

(W - write)

fügt bereich an die Datei datei an, sonst verhält es sich wie das
Kommando w, das datei aber überschreibt. Existiert datei noch nicht, wird sie angelegt.

adresse

Die mit adresse adressierte Zeile wird ausgegeben.

[adresse]+zahl

Dieses Kommando gibt die Zeile aus, die zahl Zeilen hinter der mit adresse adressierten Zeile liegt.

adresse nicht angegeben:
adresse = .

[adresse]=

Die Nummer von adresse wird ausgegeben. Die aktuelle Zeile wird dadurch nicht verändert.

adresse nicht angegeben:
adresse = $

!kommando

Der Rest der Zeile hinter dem ! wird als Shell-Kommando interpretiert und ausgeführt. Ist in kommando ein nicht entwertetes Prozent-Zeichen % enthalten, wird es durch den gespeicherten Dateinamen ersetzt. !! wiederholt das letzte kommando. In beiden Fällen wird die expandierte Kommandozeile ausgegeben. Nach Beendigung des kommandos ist ed wieder aktiv. Die aktuelle Zeile wird nicht verändert. Nicht zu kombinieren mit den Kommandos g und v!

Eingabetaste

Geben Sie im Kommandomodus die Eingabetaste alleine ein, wird die Zeile hinter der aktuellen Zeile ausgegeben. Dies ist mit der Eingabe .+1p gleichbedeutend. Sie können so im Puffer von einer Zeile zur nächsten springen.

Die Eingabetaste müssen Sie drücken, um im Kommandomodus die Eingabe eines Kommandos oder um im Eingabemodus die Eingabe einer Textzeile abzuschließen.

CTRL+C oder @@c

Mit CTRL+C oder @@c können Sie laufende ed-Kommados unterbrechen oder die Eingabe einer Zeile abbrechen. ed meldet sich anschließend mit einem ? zurück.

CTRL+D oder @@d

Die Wirkung von CTRL+D oder @@d ist dieselbe wie beim Kommando q.

Steht das Zeichen, das einen regulären Ausdruck oder eine Ersetzungszeichenkette abschließt (z.B. ein /), unmittelbar vor einem Neue-Zeile-Zeichen, dann können Sie dieses Zeichen weglassen. Die adressierte Zeile wird dann ausgegeben. Die folgenden Beispielpaare haben die gleiche Funktion:


s/s1/s2s/s1/s2/p
g/s1g/s1/p
?s1?s1?

Arbeiten mit ed-Skripts

ed liest Kommandos und einzufügenden Text von der Standard-Eingabe. Deshalb können Sie die Eingabe auch umlenken, so dass ed aus einer Datei liest. Mit

$ ed -s datei < ed_skriptdatei > ausgabe

wird die Datei datei editiert und mit den ed-Kommandos bearbeitet, die in der Datei ed_skriptdatei stehen. Die Option -s unterdrückt die standardmäßige Ausgabe der Meldungstexte auf den Bildschirm.

Das Arbeiten mit ed-Skripts hat den Vorteil, dass Sie bestimmte Kommandofolgen jederzeit reproduzieren und beliebig oft verwenden können. Außerdem können Sie so diesen Vorgang auch als Hintergrundprozess ablaufen lassen und selbst ungestört am Bildschirm weiterarbeiten:

$ ed datei < ed_skriptdatei&

Arbeiten Sie mit einem fehlerhaften ed-Skript, dann beendet ed beim ersten Fehler.

Endestatus  

0bei Erfolg
>0bei fehlerhaftem Aufruf des ed oder bei Abbruch einer Prozedur aufgrund fehlerhafter ed-Kommandos.

Fehler

Wenn Sie beim Aufruf von ed zwischen Option -p und zeichenkette kein Leerzeichen eingebenoder zeichenkette vergessen:

ed: -p argument fehlt


Wenn Ihnen bei ed-Kommandos Fehler unterlaufen:

?


Syntaxfehler im Kommando

?datei

Datei datei ist nicht vorhanden oder kann nicht gelesen werden.


Nähere Informationen bekommen Sie mit den Kommandos h und H. Die häufigsten Fehlermeldungen sind:


line out of range

Zeile außerhalb des gültigen Zeilenbereichs


warning: expecting 'w'

Warnung: ’w’ wird erwartet


no space after command

kein Leerzeichen hinter dem Kommando


unknown command

unbekanntes Kommando


bad range

ungültige Bereichsangabe


cannot open input file

Eingabedatei kann nicht geöffnet werden


illegal or missing delimiter

unzulässiges oder fehlendes Trennzeichen


illegal suffix

unzulässiges Suffix


illegal or missing filename

unzulässiger oder fehlender Dateiname


no match

keine passende Zeichenkette gefunden

Datei

ed.hup

In dieser Datei werden die Daten gesichert, wenn ed das Signal SIGHUP empfängt (siehe kill()).

/var/tmp

Wenn dieses Dateiverzeichnis existiert, dann wird es als Dateiverzeichnis für die Speicherungder Temporärdatei verwendet.

/tmp

Wenn die Variable TMPDIR nicht auf ein existierendes Dateiverzeichnis gesetzt ist und das Verzeichnis /var/tmp nicht existiert, dann wird /tmp zur Speicherung der Temporärdatei verwendet.

Variable

TMPDIR

Wenn diese Variable gesetzt und nicht leer ist, dann wird ihr Wert anstelle von /var/tmp als Dateiverzeichnis für die Speicherung der Temporärdatei verwendet.

HOME

Legt den Pfadname für das HOME-Dateiverzeichnis des Benutzers fest.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos ed:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_COLLATE

Legt in geklammerten regulären Ausdrücken die Bedeutung von Zeichenbereichen, Äquivalenzklassen und Zeicheneinheiten fest.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Beispiel für ein ed-Skript:

In einer Datei sollen die ersten drei Zeilen durch eine Zeile mit dem Text „Adressen" und überall soll das Wort „Stachus“ durch „Karlsplatz“ ersetzt werden.

Inhalt der Datei edskript:

1,3c
Adressen
.
1,$s/Stachus/Karlsplatz/g
w

Bearbeitung einer Datei mit den Kommandos aus edskript:

$ ed datei < edskript

Wenn ed seine Kommandos nicht von der Tastatur, sondern aus einer Datei liest, wird der Editor nach dem ersten für ed unverständlichen Kommando verlassen.

Beispiel 2

Beispiel für ein here-skript:

In beliebigen Dateien, die beim Aufruf der Prozedur xy als Argumente übergeben werden, sollen die ersten drei Zeilen durch eine Zeile mit dem Text „Adressen" und überall soll das Wort „Stachus" durch „Karlsplatz" ersetzt werden.

Inhalt der Prozedurdatei xy:

for i in $*
do
ed $i << scrend
1,3c
Adressen
.
1,\$s/Stachus/Karlsplatz/g
w
scrend
done

Bearbeitung der Dateien text1, text2 und text3 mit der Prozedur xy:

$ sh xy text1 text2 text3

Die Zeichenkette << scrend hinter dem ed-Aufruf bewirkt, dass die Shell den Text bis zur Zeichenkette scrend an ed als Eingabe übergibt. Die zweite Zeichenkette scrend muss ohne führende Leerzeichen als einziges Wort in einer Zeile stehen. Bei der Adressangabe 1,$ muss die Sonderbedeutung von $ mit \ aufgehoben werden, da die Shell sonst das nachfolgende s als Name einer Shell-Variablen interpretieren würde.

Siehe auch

ex, grep, sed, sh, stty, umask, vi

Tabellen und Verzeichnisse, Reguläre Ausdrücke