Provided by:
manpages-pl_20051117-1_all 
NAZWA
ed, red - edytor tekstu
SKŁADNIA
ed [-] [-Gs] [-p acuch] [plik]
red [-] [-Gs] [-p acuch] [plik]
OPIS
ed jest zorientowanym liniowo edytorem tekstu. Jest o używany do
tworzenia, wyświetlania, modyfikowania i innych działań na plikach
tekstowych. red to ed zastrzeżony (restricted): może edytować tylko
pliki z bieżącego katalogu i nie może wykonywać komend powłoki.
Po wywołaniu z argumentem pliku, jego kopia jest odczytywana do bufora
edytora. Wszelkie zmiany robione są na tej kopii, nie na pliku jako
takim. Podczas kończenia pracy z ed, wszelkie zmiany, których nie
zachowano komendą `w' są tracone.
Edycja jest dokonywana w dwóch różnych trybach: komend i wprowadzania.
Po uruchomieniu, ed jest w trybie komend. W trybie tym ze
standardowego wejścia czytane są komendy, a następnie są one wykonywane
na zawartości bufora edytora. Przykładowa komenda może wyglądać tak:
,s/old/new/g
co zamienia wszystkie pojawienia się napisu old na new.
Po podaniu komendy wprowadzania, takiej jak `a' (append--dopisz), `i'
(insert--wstaw) lub `c' (change-zmień), ed wchodzi w tryb wprowadzania.
Jest to podstawowe narzędzie wprowadzania tekstu do pliku. W trybie tym
nie ma dostępnych żadnych komend. Zamiast tego, standardowe wejście
jest bezpośrednio zapisywane do bufora edytora. Linie składają się z
tekstu, aż do (łącznie) znaku nowej linii. Tryb wprowadzania jest
przerywany wprowadzeniem pojedynczej kropki w linii.
Wszystkie komendy ed operują na całych liniach, lub zakresach linii;
np. komenda `d' kasuje (delete) linie; komenda `m' przenosi linie,
itp. Można też modyfikować tylko część linii, korzystając z narzędzi
podmiany, podanych np. w powyższym przykładzie. Jednak nawet tu,
komenda `s' tyczy się do całych linii naraz.
W ogólności, komendy ed składają się z zera lub więcej adresów linii,
za którymi następuje pojedynczy znak komendy i często dodatkowe
parametry; komendy mają więc strukturę:
[adres [,adres]]komenda[parametry]
Adresy wskazują linię, lub zakres linii, których dotyczy komenda. Jeśli
podano mniej adresów niż potrzeba komendzie, używane są adresy
domyślne.
OPCJE
-G Wymusza kompatybilność wsteczną. Dotyczy komend `G', `V', `f',
`l', `m', `t', and `!!'.
-s Powstrzymuje diagnostykę. Powinno być używane jeśli standardowe
wejście ed'a jest ze skryptu.
-p acuch
Podaje znak zachęty komend. Może to być włączane, lub wyłączane
komendą `P'.
plik Określa nazwę odczytywanego pliku. Jeśli plik jest poprzedzony
wykrzyknikiem (!), to jest interpretowany jak komenda powłoki.
W tym wypadku to, co jest czytane, jest standardowym wyjściem
pliku wywołanego przez sh(1). Aby odczytać plik, którego nazwa
rozpoczyna się od wykrzyknika, poprzedź go odwrotnym ukośnikiem
(\). Domyślna nazwa pliku jest ustawiana na file tylko jeśli
nie jest poprzedzona wykrzyknikiem.
ADRESOWANIE LINIOWE
Adres reprezentuje numer linii w buforze. ed obsługuje adres biecy,
który jest zazwyczaj przekazywany komendom jako domyślny (w wypadku
niepodania tego argumentu). Podczas pierwszego odczytu pliku, adres
bieżący jest ustawiany na ostatnią linię. Ogólnie, adres bieżący jest
ustawiany na ostatnią linię, dotkniętą przez komendę.
Adres linii jest konstruowany z jednej z baz z poniższej listy, za
którą opcjonalnie może następować offset numeryczny. Offsety mogą
zawierać dowolne kombinacje cyfr, operatorów (np. +, - i ^) i białych
spacji. Adresy są czytane od lewej do prawej, a ich wartości są
obliczane względem adresu bieżącego.
Wyjątkiem reguły, że adresy reprezentują numery jest adres address 0
(zero). Oznacza to "przed pierwszą linią," i jest legalne tam gdzie ma
sens.
Zakres adresów to dwa adresy, oddzielone przecinkiem lub średnikiem.
Wartość pierwszego adresu w zakresie nie może być większa od drugiego.
Jeśli w zakresie podany jest tylko jeden adres, to drugi adres jest
ustawiany na podany. Jeśli podano n-krotną parę adresów, gdzie n > 2,
to zakres jest określany przez ostatnie dwa adresy zestawu. Jeśli
oczekiwany jest tylko jeden adres, to używany jest ostatni.
Każdy adres w zakresie przecinkowym jest interpretowany względem adresu
bieżącego. W zakresie średnikowym, pierwszy adres jest używany do
ustawienia adresu bieżącego, a drugi względem pierwszego.
Rozpoznawane są następujące symbole adresowe.
. Adres bieżącej linii w buforze.
$ Adres ostatniej linii w buforze.
n nta linia w buforze, gdzie n jest liczbą w zakresie [0,$].
-
^ Poprzednia linia. Jest to równoważne -1 i może być powtarzane
z rosnącym efektem.
-n
^n nta linia poprzednia, gdzie n jest liczbą nieujemną.
+ Następna linia. Jest to równoważne +1 i może być powtarzane z
rosnącym efektem.
+n
biała spacja n
nta następna linia, gdzie n jest liczbą nieujemną. Biaa
spacja, za którą następuje liczba n jest interpretowana jako
+n.
,
% Zakres od pierwszej do ostatniej linii. Jest to równoważne 1,$.
; Zakres od bieżącej do ostatniej linii. Jest to równoważne .,$.
/re/ Następna linia, zawierająca wyrażenie regularne re.
Poszukiwanie gdy jest to konieczne, zakręca na początek bufora
i leci dalej aż do linii bieżącej. // powtarza ostatnie
szukanie.
?re? Poprzednia linia zawierająca wyrażenie regularne re.
Poszukiwanie gdy jest to konieczne, zakręca na koniec bufora i
leci aż do linii bieżącej. ?? powtarza ostatnie szukanie.
'lc Linia poprzednio zaznaczona przez komendę `k' (marK), gdzie lc
jest małą literą.
WYRAŻENIA REGULARNE
Wyrażenia regularne są wzorcami, używanymi w wybieraniu tekstu. Na
przykład, komenda ed
g/napis/
drukuje wszystkie linie, zawierające napis. Wyrażenia regularne są
używane też przez komendę `s', gdzie wybierają stary tekst, zastępowany
nowym.
W dodatku do podawania napisów, wyrażenia regularne mogą reprezentować
klasy łańcuchów znakowych. Łańcuchy tak reprezentowane będą odpowiadać
wyrażeniom regularnym. Jeśli jest możliwe, by wyrażenie regularne
dopasowało kilka napisów w linii, to wybierane jest dopasowanie
najbardziej z lewej.
Do konstruowania wyrażeń regularnych używane są następujące symbole:
c Dowolny znak c nie wymieniony niżej, łącznie z `{', '}', `(',
`)', `<' i `>' oznacza samego siebie.
\c Znak c
zacytowany lewym ukośnikiem, inny niż `{', '}', `(', `)', `<',
`>', `b', 'B', `w', `W', `+' i `?' oznacza właśnie ten znak.
Oznacza pojedynczy znak. (dowolny)
[klasa-znakw]
Oznacza pojedynczy znak z klasy znakw. Aby do klasy znakw
włączyć `]', musi to być pierwszy znak. Zakres znaków można
przekazać, rozdzielając jego końce znakiem `-', np. `a-z',
który oznacza wszystkie małe litery. Do podawania zestawów
znaków w klasie znakw można używać następujących literałów:
[:alnum:] [:cntrl:] [:lower:] [:space:]
[:alpha:] [:digit:] [:print:] [:upper:]
[:blank:] [:graph:] [:punct:] [:xdigit:]
Gdy znak `-' pojawia się jako pierwszy lub ostatni znak klasy-
znakw, to dopasowuje sam siebie. Wszystkie inne znaki klasy-
znakw odpowiadają same sobie.
Wzorce w klasie-znakw postaci
[.col-elm.] lub [=col-elm=]
gdzie col-elm jest elementem porwnawczym są interpretowane
według locale(5) (nie jest to obecnie obsługiwane). Zobacz
regex(3) dla objaśnień tych konstrukcji.
[^klasa-znakw]
Odpowiada dowolnemu pojedynczemu znakowi, innemu niż nowa
linia, który nie jest w klasie-znakw. klasa-znakw jest
definiowana podobnie jak wyżej.
^ Jeśli `^' jest pierwszym znakiem wyrażenia regularnego, to
zaczepia wyrażenie regularne na początku linii. W przeciwnym
wypadku oznacza `^'.
$ Jeśli `$' jest ostatnim znakiem wyrażenia regularnego, to
doczepia wyrażenie regularne do końca linii. W przeciwnym
wypadku oznacza `$'.
\(re\) Definiuje podwyrażenie re. Podwyrażenia mogą być zagnieżdżane.
Kolejne wsteczne odniesienia postaci `\n', gdzie n jest cyfrą z
zakresu [1,9], rozwijają się do tekstu dopasowanego przez nte
podwyrażenie. Na przykład, wyrażenie regularne `\(a.c\)\1'
odpowiada napisowi `abcabc', lecz nie `abcadc'. Podwyrażenia
są porządkowane względem ich lewego ogranicznika.
* Odpowiada dopasowaniu poprzedzającego znaku lub podwyrażenia
zero lub więcej razy. jeśli '*' jest pierwszym znakiem
wyrażenia regularnego, lub podwyrażenia, to oznacza '*'.
Operator `*' daje czasem nieoczekiwane rezultaty. Na przykład
wyrażenie `b*' dopasowuje początek napisu `abbb', według
podnapisu `bbb'.
\{n,m\}
\{n,\}
\{n\} Odpowiada poprzedzającemu jednoznakowemu wyrażeniu regularnemu,
lub podwyrażeniu, dopasowanemu przynajmniej n i najwięcej m
razy. Jeśli m jest pominięte, to jest tylko dolne
ograniczenie. Jeśli pominięty jest też przecinek, dopasowanie
wymaga dokładnie n powtórzeń. Jeśli któraś z tych postaci
pojawi się na początku, to jest interpretowana literalnie. Np.
`\{2\}' odpowiada `{2}', itd.
\<
\> Zaczepia wyrażenie znakowe, lub podwyrażenie do początku (\<)
lub końca (\>) sowa, czyli w ASCII maksymalnego łańcucha
znaków alfanumerycznych, łącznie z podkreśleniem (_).
Następujące rozszerzone operatory są poprzedzane lewym ukośnikiem, aby
odróżnić je od tradycyjnej składni ed.
\`
\' Bezwarunkowo dopasowuje początek (\`) lub koniec (\') linii.
\? Opcjonalnie odpowiada pojedynczemu znakowi, lub podwyrażeniu,
które go poprzedza. Np. wyrażenie `a[bd]\?c' odpowiada `abc',
`adc' i `ac'. Jeśli \? pojawia się na początku linii, to jest
traktowane literalnie jako `?'.
\+ Odpowiada pojedynczemu znakowi, lub podwyrażeniu,
poprzedzającemu go, a powtarzającemu się jeden, lub więcej
razy. Tak więc wyrażenie regularne `a+' jest skrótem `aa*'.
Jeśli \+ pojawi się na początku linii, to odpowiada literalnemu
`+'.
\b Odpowiada początkowi lub końcowi (łańcuch zerowy) słowa. Tak
więc wyrażenie regularne `\bhello\b' jest równoważne
`\<hello\>'. Jednak, `\b\b' jest prawidłowym wyrażeniem,
podczas gdy `\<\>' nim nie jest.
\B Odpowiada (łańcuchowi zerowemu) w słowie.
\w Odpowiada dowolnemu znakowi w słowie.
\W Odpowiada dowolnemu znakowi nie będącemu w słowie.
KOMENDY
Wszystkie komendy ed to pojedyncze znaki, choć niektóre wymagają
dodatkowych parametrów. Jeśli parametry komendy rozciągają się na
kilka linii, to każda linia poza ostatnią, powinna być zakończona lewym
ukośnikiem (\).
Ogólnie, na linię dozwolona jest najwięcej jedna komenda. Jednak
większość komend przyjmuje przyrostek drukowania, który może być
dowolnym z `p' (drukuj-print), `l' (listuj-list) , lub `n' (wyliczaj-
eNumerate), który drukuje ostatnią linię, dotkniętą przez komendę.
Przerwanie (zwykle ^C) ma znaczenie przerywania bieżącej komendy i
powracania do trybu komend.
ed rozpoznaje następujące komendy. Komendy pokazane są wraz z
domyślnymi adresami, lub zakresami, dostarczanymi gdy nie zostały
podane (w nawiasach).
(.)a Dokleja do adresowanej linii bufora linię, która może być
adresem zerowym. Tekst jest wstawiany w trybie wprowadzania.
Adres bieżący jest ustawiany na ostatnią wprowadzoną linię.
(.,.)c Zmienia linie w buforze. Adresowane linie są kasowane, a w ich
miejsce jest wklejany tekst. Tekst wprowadzany jest w trybie
wprowadzania. Bieżący adres jest ustawiany na ostatnią
wstawioną linię.
(.,.)d Kasuje adresowane linie z bufora. Jeśli za skasowanym zakresem
jest linia, to bieżący adres jest na nią ustawiany. W
przeciwnym wypadku, jest ustawiany na linię przed skasowanym
zakresem.
e plik Edytuje plik, i ustawia domyślną nazwę pliku. Jeśli plik nie
jest podany, używana jest domyślna nazwa pliku. Wszelkie linie
bufora są kasowane przed odczytem nowego pliku. Bieżący adres
jest ustawiany na ostatnią odczytaną linię.
e !komenda
Edytuje standardowe wyjście `!komendy', (zobacz !komenda
niżej). Domyślna nazwa pliku nie jest zmieniana. Wszelkie
linie bufora są kasowane przed odczytaniem wyjścia komendy.
Bieżący adres jest ustawiany na ostatnią odczytaną linię.
E plik Edytuje bezwarunkowo plik. Jest to podobne do komendy e lecz
niezapisane zmiany są niszczone bez ostrzeżenia. Bieżący adres
jest ustawiany na ostatnią odczytaną linię.
f plik Ustawia domyślną nazwę pliku na plik. Jeśli plik nie jest
podany, drukowana jest niecytowana domyślna nazwa pliku.
(1,$)g/re/lista-komend
Aplikuje list-komend do każdej linii, odpowiadającej wyrażeniu
regularnemu re. Bieżący adres jest ustawiany na obecnie
dopasowaną linię przed wykonaniem listy-komend. Na końcu
komendy `g' adres bieżący jest ustawiany na ostatnią linię,
dotkniętą przez list-komend.
Każda komenda w licie komend musi być w oddzielnej liście, a
każda linia poza ostatnią musi być zakończona lewym ukośnikiem
(\). Dozwolone są wszystkie komendy poza `g', `G', `v', i `V'.
Nowa linia w licie-komend jest równoważna komendzie `p'.
(1,$)G/re/
Interaktywnie edytuje linie odpowiadające wyrażeniu regularnemu
re. Dla każdej linii, linia jest drukowana i ustawiany jest
adres bieżący, a użytkownik jest pytany o wstawienie listy-
komend. Na końcu działania komendy `G', adres bieżący jest
ustawiany na ostatnią linię, dotkniętą przez list-komend.
Format listy-komend jest taki sam jak w `g'. Samotna nowa
linia działa jak zerowa lista komend. Pojedynczy `&' powtarza
ostatnią niezerową listę komend.
H Włącza drukowanie wyjaśnień błędów. Domyślnie nie są one
drukowane. Zalecanym jest, by skrypty rozpoczynały się tą
komendą. Umożliwia to debuggowanie.
h Drukuje objaśnienie ostatniego błędu.
(.)i Wstawia tekst do bufora przed linię bieżącą. Tekst jest
wstawiany w trybie wstawiania. Bieżący adres jest ustawiany na
ostatnią wstawioną linię.
(.,.+1)j
Łączy adresowane linie. Adresowane linie są kasowane z bufora i
zamieniane przez pojedynczą linię, zawierającą połączony tekst.
Adres bieżący jest ustawiany na wynikową linię.
(.)klc Zaznacza linię małą literą lc. Linia może być wtedy adresowana
jako 'lc. Znaczenie nie jest czyszczone aż do skasowania lub
zmodyfikowania linii.
(.,.)l Drukuje niedwuznacznie adresowane linie. Jeśli jest wywołany z
terminala, ed pauzuje na końcu każdej strony, aż do
wprowadzenia nowej linii. Bieżący adres jest ustawiany na
ostatnią drukowaną linię.
(.,.)m(.)
Przenosi linie w buforze. Adresowane linie są przenoszone za
prawostronny adres docelowy, który może być adresem 0 (zero).
Bieżący adres jest ustawiany na ostatnią przeniesioną linię.
(.,.)n Drukuje adresowane linie wraz z ich numerami linii. Bieżący
adres jest ustawiany na ostatnią drukowaną linię.
(.,.)p Drukuje adresowane linie. Jeśli jest wywołany z terminala, ed
pauzuje na końcu każdej strony aż do wprowadzenia nowej linii.
Bieżący adres jest ustawiany na ostatnią drukowaną linię.
P Włącza i wyłącza znak zachęty komend. O ile nie był on
określony opcją linii komend, -p napis, to jest domyślnie
wyłączony.
q Kończy pracę z ed.
Q Kończy pracę bezwarunkowo. Jest to podobne do komendy q lecz
niezapisane zmiany są niszczone bez ostrzeżenia.
($)r plik
Odczytuje file za adresowaną linię. Jeśli plik nie jest podany,
używana jest domyślna nazwa pliku. Jeśli nie było wcześniej
domyślnej nazwy pliku, domyślna nazwa pliku jest ustawiana na
plik. W przeciwnym wypadku, domyślna nazwa pliku jest
niezmieniana. Bieżący adres jest ustawiany na ostatnią
odczytaną linię.
($)r !komenda
Wczytuje za adresowaną linią wyjście `!komendy', (zobacz
!komenda niżej). Domyślna nazwa pliku jest niezmieniona.
Bieżący adres jest ustawiany na ostatnią wczytaną linię.
(.,.)s/re/zamiana/
(.,.)s/re/zamiana/g
(.,.)s/re/zamiana/n
Zamienia tekst w adresowanych liniach, odpowiadający wyrażeniu
regularnemu re na zamian. Domyślnie zamieniane jest tylko
pierwsze dopasowanie linii. Po podaniu przyrostka `g' (global)
zamieniane jest każde dopasowanie. Przyrostek `n', gdzie n
jest liczbą dodatnią, powoduje że zmieniane jest tylko n-te
dopasowanie. Błędem jest, jeśli nie dokonano żadnych
podstawień na żadnej z adresowanych linii. Bieżący adres jest
ustawiany na ostatnią dotkniętą linię.
re i zamiana mogą być rozdzielane dowolnym znakiem innym niż
spacja i nowa linia (zobacz komendę `s', niżej). Jeśli jeden,
lub dwa z ostatnich ograniczników są pominięte, to ostatnia
dotknięta linia jest drukowana tak, jakby podano przyrostek
`p'.
Niecytowany `&' w zamianie jest zamieniany na aktualnie
dopasowany tekst. Sekwencja `\m', gdzie m jest liczbą w
zakresie [1,9] jest zamieniana m-tą referencją wsteczną
wyrażenia dopasowanego tekstu. Jeśli zamiana składa się z
pojedynczego `%', to używana jest zamiana z ostatniego
podstawienia. W zamianie można osadzać nowe linie po ich
zacytowaniu lewym ukośnikiem (\).
(.,.)s Powtarza ostatnie podstawienie. Ta postać komendy `s'
przyjmuje przyrostek licznika `n', lub dowolną kombinację
znaków `r', `g', i `p'. Jeśli podano przyrostek licznika `n',
to zmieniane jest tylko n-te dopasowanie. Przyrostek `r'
powoduje, że zamiast ostatnie podstawienia, używane jest
wyrażenie regularne ostatniego szukania. Przyrostek `g' włącza
przyrostek global ostatniego podstawienia. Przyrostek `p'
włącza przyrostek drukowania ostatniego podstawienia. Bieżący
adres jest ustawiany na ostatnią dotkniętą linię.
(.,.)t(.)
Kopiuje adresowane linie za adres, wskazany z prawej strony,
który może być adresem 0 (zero). Bieżący adres jest ustawiany
na ostatnią kopiowaną linię.
u Cofa ostatnią komendę i odtwarza bieżący adres na taki, jaki
był przed nią. Komendy globalne `g', `G', `v', i `V'. są
traktowane jako pojedyncze. `u' jest samo dla siebie inwersją.
(1,$)v/re/lista-komend
Aplikuje list-komend na każdej z adresowanych linii, nie
pasujących do wyrażenia regularnego re. Jest to podobne do
komendy `g'.
(1,$)V/re/
Edytuje interaktywnie adresowane linie, nie odpowiadające
wyrażeniu regularnemu re. Jest to podobne do komendy `G'.
(1,$)w plik
Zapisuje adresowane linie do pliku. Wszelkie poprzednie
zawartości pliku są tracone bez ostrzeżenia. Jeśli nie ma
domyślnej nazwy pliku, to jest ona ustawiana na plik, a w
przeciwnym wypadku nie jest zmieniana. Jeśli nie podano nazwy
pliku, używana jest nazwa domyślna. Bieżący adres nie jest
zmieniany.
(1,$)wq plik
zapisuje adresowane linie do pliku, a następnie wykonuje
komendę `q'.
(1,$)w !komenda
Zapisuje adresowane linie na standardowe wejście `!komendy',
(zobacz !komenda niżej). Domyślna nazwa pliku i bieżący adres
nie są zmieniane.
(1,$)W plik
Dokleja adresowane linie do końca pliku. Jest to podobne do
komendy `w', lecz poprzednia zawartość pliku nie jest
niszczona. Bieżący adres nie jest zmieniany.
(.)x Kopiuje (wstawia) zawartość bufora wycinania za adresowaną
linię. Bieżący adres jest ustawiany na ostatnią skopiowaną
linię.
(.,.)y Kopiuje (wyszarpuje) adresowane linie do bufora wycinania.
Bufor wycinania jest nadpisywany przez dalsze wywołania `y',
`s', `j', `d', lub `c'. Bieżący adres nie jest zmieniany.
(.+1)zn Przewija n linii naraz, rozpoczynając od adresowanej linii.
Jeśli n nie jest podane, używany jest bieżący rozmiar okna.
Bieżący adres jest ustawiany na ostatnią drukowaną linię.
!komenda
Wykonuje komend poprzez sh(1). Jeśli pierwszy znak komendy to
`!', to jest on zamieniany tekstem poprzedniej `!komendy'. ed
nie przetwarza komendy w poszukiwaniu cytatów lewoukośnikowych.
Jedna niecytowany `%' jest zamieniany domyślną nazwą pliku.
Gdy powłoka kończy wykonywanie, na standardowym wyjściu
drukowany jest `!'. Bieżąca linia nie jest zmieniana.
(.,.)# Rozpoczyna komentarz; reszta linii, aż do nowej linii jest
ignorowana. Jeśli po adresie linii następuje średnik, to
bieżący adres jest ustawiany na ten adres. W przeciwnym wypadku
adres nie jest zmieniany.
($)= Drukuje numer linii adresowanej linii.
(.+1)newline
Drukuje adresowaną linię i ustawia bieżący adres na tę linię.
PLIKI
/tmp/ed.* Plik buforowy
ed.hup Plik, do którego ed zapisuje gdy terminal jest
zawieszany.
ZOBACZ TAKŻE
vi(1), sed(1), regex(3), sh(1).
USD:12-13
B. W. Kernighan and P. J. Plauger, Software Tools in Pascal , Addison-
Wesley, 1981.
OGRANICZENIA
ed przetwarza argumenty plikowe z cytatami lewoukośnikowymi, np.
wszystkie znaki poprzedzone lewym ukośnikiem w nazwie pliku są
interpretowane literalnie.
Jeśli plik tekstowy nie jest zakończony znakiem nowej linii, ed podczas
odczytu/zapisu dopisuje go. W przypadku pliku binarnego, ed tego nie
robi.
DIAGNOSTYKA
Po błędzie, jeśli wejście ed'a następuje z pliku regularnego, lub
"dokumentu tutaj" (dokumentu włączonego) to kończy; w przeciwnym
wypadku drukuje `?' i powraca do trybu komend. Wyjaśnienie ostatniego
błędu jest drukowane po komendzie `h' (help).
Próba zakończenia ed lub edycji innego pliku przed zapisaniem
zmodyfikowanego bufora powoduje błąd. Jeśli komenda jest wstawiona
drugi raz, powiedzie się, lecz zmiany bufora będą utracone.
ed kończy działanie z zerem, jeśli nie było błędów. W przeciwnym
wypadku z wartością >0.
10 listopada 1994 ED(1)