10.5 Der Editor »ed« 

Der ed-Editor ist ein sehr alter UNIX-Editor. Mit ihm kommen Sie nur selten in Kontakt (etwa falls Sie bei der OpenBSD-Installation einmal von Hand Konfigurationen ändern wollen), aber das Know-how in Bezug auf dieses Urgestein kann in einigen Situationen sehr hilfreich sein – vielleicht werden Sie auch einmal ganz froh darüber sein, mit diesem Buch eine Einführung in die Arbeit mit dem ed zu erhalten, bei dieser wollen wir es aber auch belassen.
10.5.1 Die Grundlagen 

Der ed-Editor wird ähnlich bedient wie der vi-Editor, einige Kommandos sind sogar fast gleich benannt. Allerdings muss erwähnt werden, dass für das Editieren von Dateien mit dem ed deutlich mehr Aktionen seitens des Benutzers notwendig sind. Allein das Anzeigen einer Datei bzw. von Dateibereichen geschieht nicht ganz ohne weiteres Zutun, doch beginnen wir besser bei den absoluten Grundlagen.
Starten, Beenden, Speichern und Laden
Um eine Datei mit dem ed zu laden, geben Sie einfach ed Dateiname ein. Sie verlassen den Editor durch Eingabe von q bzw. Q (Letzteres verwirft getätigte Änderungen ohne Rückfrage, dazu gleich mehr). Sie können ed auch ohne Angabe einer Datei starten, dann müssen Sie allerdings einen Dateinamen beim Speichern angeben. Verwenden Sie zum Speichern den Befehl w und zum Speichern in eine neue Datei den Befehl w Dateiname.
$ ed /etc/passwd
2198
q
Listing 10.5 Die /etc/passwd einlesen
10.5.2 Eingeben und Anzeigen von Inhalten 

Inhalte anzeigen
Der nächste wichtige Schritt ist, dass Sie lernen, Dateiinhalte anzuzeigen. Zur Anzeige von Inhalten wird der Befehl p verwendet. Sie müssen dabei allerdings auch angeben, welchen Inhalt Sie ansehen möchten: Dem p-Befehl setzen Sie dazu die gewünschte Zeilennummer vor, wobei 1 die erste und $ die letzte Zeile der Datei repräsentieren. 2p würde also beispielsweise die zweite Zeile der Datei ausgeben. Sie können auch ganze Bereiche angeben, indem Sie Start- und Endzeilennummer durch ein Komma getrennt eingeben: A,Bp. Um die aktuelle Zeile auszugeben, verwenden Sie den Punkt: .p.
$ ed myfile 28 1p Hallo Welt. .p Hallo Welt. 2,5p 2,5p A B C D 1,$p Hallo Welt. A B C D E F G H
Listing 10.6 Eine Datei auszugsweise und ganz anzeigen
Wo befinden Sie sich?
Die aktuelle Zeilennumer gibt Ihnen ed über den Befehl .n aus. Sie können auch mehrere Zeilen samt Nummern ausgeben lassen, indem Sie den Zeilenbereich, wie beim p-Befehl analog beim n-Befehl angeben.
2p A .n 2
Listing 10.7 Zeilennummer anzeigen
Eingaben tätigen
Wie auch beim vi-Editor müssen Sie beim ed-Editor für Texteingaben in den Eingabemodus wechseln. In diesen gelangen Sie über den Befehl i bzw. a. Mit Ni können Sie Text vor der N.ten Zeile einfügen. Mit Na fügen Sie Text hingegen hinter der N.ten Zeile ein. Um Text an das Ende der Datei anzufügen, benutzen Sie für den a-Parameter die Adressangabe $, also: $a.
Nachdem Sie in den Eingabemodus gewechselt haben, können Sie dort mehrzeilige Eingaben tätigen. Um den Eingabemodus wieder zu verlassen, muss in eine Zeile ein einzelner Punkt geschrieben werden. Wenn Sie die letzte gemachte Eingabe wieder rückgängig machen möchten, verwenden Sie einfach den Undo-Befehl (u).
$ ed myfile 28 4,$p C D E F G H $a Neues Ende . 4,$p C D E F G H Neues Ende u 4,$p C D E F G H Q
Listing 10.8 Dateiinhalt anhängen und wieder löschen
10.5.3 Inhalte kopieren und einfügen 

Beim Kopieren und Einfügen von Inhalten müssen – wie immer – die Zeilennummern angegeben werden, von denen Sie kopieren möchten und bei denen Sie einfügen möchten. Verwendet wird dazu der Befehl t. Vor den Befehl schreiben Sie den Zeilenbereich, den Sie kopieren möchten. Hinter den Befehl schreiben Sie die Zeile, hinter die eingefügt werden soll. Soll vor die erste Zeile eingefügt werden, muss als Ziel die Adresse 0 angegeben werden. Hier einige Beispiele:
1,$n 1 Hallo Welt. 2 A 3 B 4 C 5 D 6 E 7 F 8 G 9 Neuer Input 10 H 2,4t10 1,$n 1 Hallo Welt. 2 A 3 B 4 C 5 D 6 E 7 F 8 G 9 Neuer Input 10 H 11 A 12 B 13 C 2,4t0 1,$n 1 A 2 B 3 C 4 Hallo Welt. 5 A 6 B 7 C 8 D 9 E 10 F 11 G 12 Neuer Input 13 H 14 A 15 B 16 C
Listing 10.9 Anwendung des t-Befehls
10.5.4 Das Beenden erzwingen 

Wie im vi-Editor (und wie bereits erwähnt) gibt es zum Beenden des ed-Editors zwei verschiedene Befehle. Der eine Befehl, nämlich Q führt zur unbedingten Beendigung des Editors, was auch ungespeicherte Änderungen verwirft. Mit dem kleingeschriebenen q-Befehl bekommen Sie hingegen bei ungespeicherten Änderungen ein Fragezeichen präsentiert. Geben Sie dann nochmals q ein, wird auch dann der Editor ohne ein Speichern der getätigten Veränderungen beendet.
$ ed myfile 28 i Neuer Input . q ? w 40 q
Listing 10.10 Änderungen speichern und beenden
10.5.5 Weitere wichtige Befehle 

Selbstverständlich kennt der ed noch weitere wichtige Befehle, die wir in dieser Übersicht erwähnen möchten (die Aufzählung enthält zur besseren Übersicht über alle Befehle auch die bereits erwähnten):
- A,Bc
Ermöglicht die Eingabe von Inhalten, die die Zeilen von A bis B ersetzen. Die Angabe von B ist optional.
- A,Bd
Löschen der Zeilen A bis B. Die Angabe von B ist optional.
- Ai bzw. Aa
i fügt Inhalt vor Zeile A ein, a fügt Inhalt nach Zeile A ein. Die Eingabe von neuen Inhalten wird mit einer Zeile, in der nur ein Punkt (.) steht, beendet.
- A,BmC
Der Inhalt der Zeilen A bis B wird an die Zeile C verschoben (auch hier kann C wieder den Wert 0 annehmen, B ist optional).
- A,Bn
Gibt die Zeilen A bis B mit vorangestellter Zeilennummer aus.
- A,Bp
Gibt die Zeilen A bis B aus, wobei die Angabe von B optional ist.
- P
Schaltet den Eingabe-Prompt an bzw. aus.
- q bzw. Q
q beendet den Editor, fragt aber bei ungespeicherten Änderungen nach. Q beendet sofort.
- A,Bs/Jetzt/Dann
Ersetzen der Zeichenkette »Jetzt« durch »Dann« in den Zeilen A bis B. Die Angabe von B ist optional.
- A,BtC
Kopiert den Inhalt der Zeilen A bis B hinter die Zeile C. Um Inhalte an den Zeilenanfang zu kopieren, kann für C auch die Zeile 0 angegeben werden. Die Angabe von B ist optional.
- u
Letzte Änderung rückgängig machen.
- A,Bw (Datei)
Speichert (in Datei). Bei Angabe von einem Bereich (A bis B) werden nur die entsprechenden Zeilenbereiche gespeichert.
- !xyz
Führt den Befehl xyz aus und gibt die Ausgabe des Befehls aus.