sed(1)

NAZWA
sed - edytor strumieniowy

SKŁADNIA
sed [-n] [-g] [-e skrypt ] [-f splik ] [ plik ] ...

OPIS
Sed kopiuje podane pliki (lub domyślnie standardowe wejście) na standardowe wyjście, przy okazji edytując przepływające dane według komend zadanych w skrypcie.

Opcja -e załącza pojedynczą komendę edycyjną z następującego po niej argumentu; jeśli jest ich [komend] więcej, to są one wykonywane w kolejności pojawienia się. Jeśli jest tam tylko opcja -e i nie ma -f, flagę -e można pominąć.

Opcja -f powoduje, że komendy są pobieranego z pliku "splik"; jeśli jest ich kilka, to są one wykonywane w kolejności pojawienia się; komendy -e i -f można ze sobą łączyć.

Opcja -g powoduje, że sed zachowuje się tak, jakby każda z komend skryptu miała przyrostek g.

Opcja -n hamuje domyślne wyjście.

Skrypt składa się z komend, po jednej na linię, ułożonych w następującej postaci:
    [adres [, adres] ] funkcja [argumenty] Normalnie sed cyklicznie kopiuje linie wejścia do bieżącego bufora tekstowego, a następnie dokonuje kolejno wszystkich komend edycyjnych, których adresy wybierają bufor, a potem przesyła bufor na standardowe wyjście i czyści go.

Opcja -n hamuje normalne wyjście (tak, że ma miejsce tylko wyjście p i w). Podobnie niektóre komendy (n,M) robią samodzielne odczyty linii, a niektóre inne (d,D) powodują, że komendy następujące za nimi w danym skrypcie są pomijane (komenda D hamuje też czyszczenie bieżącego bufora tekstowego, co ma normalnie miejsce przed następnym cyklem).

Pomocnym jest też wiedzieć, że istnieje drugi bufor (nazywany `miejscem przechowywania', który może być kopiowany, lub doklejany, lub składany z bieżącym buforem.

Adres jest: liczbą dziesiętną (która odpowiada linii, gdzie numery linii to liczby zaczynające się od 1, do ostatniej linii pliku), lub `$', który adresuje ostatnią linię wyjścia, lub kontekstowym adresem, który jest `/wyrażeniem regularnym/' w zmodyfikowanym stylu ed (1), więc:

(1) Sekwencja specjalna ` odpowiada nowej linii osadzonej w buforze, a ` ' odpowiada tabulacji.

(2) Linia komend bez adresów wybiera każdy bufor.

(3) Linia komend z jednym adresem wybiera każdy bufor, który odpowiada temu adresowi.

(4) Linia komend z dwoma adresami odpowiada włącznemu zasięgowi od pierwszego bufora wejściowego, do drugiego, odpowiadającego adresowi. (Jeśli drugi adres jest liczbą mniejszą lub równą numerowi podanemu najpierw, to wybierana jest tylko jedna linia.) Gdy dopasowany jest drugi adres, sed zaczyna ponownie szukać pierwszego; tak więc dowolna liczba tych zasięgów będzie porównywana.

Operator negacji `!', znany z C, może i tu mieć zastosowanie, wskazując, że komenda odnosi się do linii nie wybranych w adresach.

W następujących funkcjach, maksymalna liczba adresów jest wskazana w nawiasie.

Argument oznaczony jako "tekst" składa się z jednej, lub większej ilości linii, w których wszystkie, poza ostatnią muszą kończyć się `', aby ukryć nową linię.

Odwrotne ukośniki w tekście są traktowane jak odwrotne ukośniki w łańcuchu zamiany komendy `s' i mogą być używane do chronienia początkowych białych spacji.

Argument oznaczony jako "rplik" i "wplik" musi być ostatnim w linii komend. Każdy wplik jest tworzony zanim rozpocznie się przetwarzanie. Dopuszczalną ilością argumentów wplików jest 10.

a "tekst"   (1)
    Doklej. Dołącz tekst na wyjście przed odczytaniem następnej linii wejścia.

b "etykieta"  (2)
    Przejdź się do komendy `:', przechowującej etykietę. Jeśli nie podano etykiety, przejdź na koniec skryptu.

c "tekst"   (2)
    Zmień. Skasuj bieżący tekst z bufora. Z adresem 0 lub 1, lub na końcu dwuadresowego zasięgu, dołącz tekst na wyjściu. Rozpocznij następny cykl.

d          (2)
    Skasuj bieżący bufor tekstowy. Rozpocznij nowy cykl.

D          (2)
    Skasuj pierwszą linię bieżącego bufora tekstowego (wszystkie znaki, aż do pierwszej nowej linii). Rozpocznij nowy cykl.

g          (2)
    Zamień zawartość bieżącego bufora tekstowego z zawartością miejsca przechowywania.

G          (2)
    Doklej zawartość miejsca przechowywania do bieżącego bufora tekstowego.

h          (2)
    Skopiuj bieżący bufor tekstowy do miejsca przechowywania.

H          (2)
    Doklej kopię bieżącego bufora tekstowego do miejsca przechowywania.

i "tekst"   (1)
    Wstaw. Wstaw tekst na standardowe wyjście.

l          (2)
    Listuj. Wysyła przestrzeń wzorców na standardowe wyjście. Opcja "w" może wystąpić jak w komendzie s, opisanej niżej. Niedrukowane znaki są rozszerzane do:
       \b -- backspace (ASCII 08)
       \t -- tabulacja (ASCII 09)
       \n -- nowa linia (ASCII 10)
       \r -- return (ASCII 13)
       \e -- escape (ASCII 27)
       \xx -- znak ASCII odpowiadający dwóm cyfrom szesnastkowym.

n          (2)
    Kopiuj bieżący bufor tekstowy na standardowe wyjście. Wczytaj do bufora nową linię.

N          (2)
    Doklej następną linię wejścia do bieżącego bufora tekstowego, wstawiając między nie osadzoną nową linię. Zmienia się bieżący numer linii.

p          (2)
    Drukuj. Kopiuj bieżący bufor tekstowy na standardowe wyjście.

P          (2)
    Kopiuj pierwszą linię bieżącego bufora tekstowego (wszystkie znaki aż do pierwszej nowej linii) na standardowe wyjście.

q          (1)
    Zakończ. Przejdź na koniec skryptu. Nie rozpoczynaj nowego cyklu.

r "rplik"  (1)
    Czytaj zawartość rpliku. Wstaw ją na wyjściu przed przeczytaniem następnej linii wejściowej.

s /wyrażenie regularne/zamiennik/flagi         (2)
    Podmień znalezione wyrażenia regularne na zamiennik (w bieżącym buforze tekstowym). Zamiast `/' można użyć dowolnego znaku. Dla dokładniejszego opisu zobacz ed (1). Flagi to zero lub więcej z następujących: g -- Globalnie. Podmieniaj wszystkie niezachodzące na siebie instancje
         łańcucha, a nie tylko pierwszą z nich. p -- Drukuj przestrzeń wzorców po dokonaniu podmiany. w -- Zapisuj. Doklej bieżący bufor tekstowy do argumentu plikowego, tak jak
         w komendzie w (o ile zostanie dokonana podmiana). Standardowe wyjście
         jest używane jeśli nie podano argumentu plikowego.

t "etykieta"  (2)
    Gałęziowy test `jeżeli'. Przejdź do komendy `:' o podanej etykiecie, jeśli dokonano jakichkolwiek podmian od ostatniego odczytu linii wejściowej, lub wywołania `t' lub `T'. Jeśli nie podano etykiety, przejdź na koniec skryptu.

T "etykieta"  (2)
    Przeskocz przy błędzie. Przejdź do komendy `:' o podanej etykiecie, jeśli nie dokonano podmian od ostatniego wczytania linii wejściowej, lub od użycia komendy `t' lub `T'. Jeśli nie podano etykiety, przejdź na koniec pliku.

w "wplik"  (2)
    Zapisz. Doklej bieżący bufor tekstowy do wpliku.

W "wplik"  (2)
    Zapisz pierwszą linię. Doklej pierwszą linię bieżącego bufora tekstowego do wpliku.

x          (2)
    Wymień zawartość bieżącego bufora tekstowego i miejsca przechowywania.

y /łańcuch1/łańcuch2/      (2)
    Tłumacz. Podmień każde pojawienie się znaku ze łańcucha1 odpowiadającym mu znakiem z łańcucha2. Długości tych znaków muszą być identyczne.

! "komenda"              (2)
    Wszystko-poza. Zastosuj funkcję (lub grupę, jeśli funkcją jest `{') tylko do linii nie wybranych przez adres(y).

: "etykieta"  (0)
    Komenda ta nie robi niczego poza przechowywaniem etykiety dla komend `b' i `t'.

=          (1)
    Wstaw bieżący numer linii na standardowe wyjście jako linię.

{          (2)
    Wywołaj następujące komendy, aż do zamykającego `}' tylko jeśli bieżąca linia odpowiada adresowi lub podanemu zasięgowi adresów.

Pusta komenda jest ignorowana.

PRZENOŚNOŚĆ
Narzędzie to było wyprowadzone z UNIX-a 4.1 BSD i (o ile wiadomo autorowi) jest z nim kompatybilne. Wszystkie udokumentowane właściwości seda z BSD są wspierane.

Pominięto jedną nieudokumentowaną właściwość (prowadzący `n' w pierwszym komentarzu, mający takie same działanie jak -n opcja linii komend).

Poprawiono następujące błędy i ograniczenia:

*   Nie ma ukrytego limitu długości (40 w sedzie BSD) na długości nazw plików.

*   Nie ma limitu długości (8 w sedzie BSD) na długość etykiet.

*   Komenda `exchange' działa teraz dla długich wzorców i miejsc przechowania.

Poczyniono następujące rozszerzenia istniejących komend:

*   komendy a, i nie naciskają na prowadzący znak odwrotnego ukośnika-\n w tekście.

*   komendy r, w nie naciskają na białą spację przed nazwą pliku.

*   Opcje g, p i P w komendach s mogą być podawane w dowolnej kolejności.

Poczyniono pewne rozszerzenia do składni wyrażeń regularnych:

*   \t jest rozpoznawane jako sekwencja specjalna tabulacji.

*   Wewnątrz RE, + woła o 1..n powtórzeń poprzedniego wzorca.

Następujące właściwości są całkowicie nowe:

*   Komenda l (listuj, nieudokumentowana i słabsza w BSD)

*   Komenda W (zapisz pierwszą linię przestrzeni wzorców do pliku).

*   Komenda T (przeskocz, jeśli nie udało się podstawienie).

*   Dozwolone są w liniach komend kończące komentarze.

Dodatkowo, komunikaty o błędach seda stały się bardziej konkretne i informatywne.

Implementacja jest również sporo mniejsza i szybsza niż sed z 4.1 BSD. Używa jedynie standardowej biblioteki I/O i exit(3).

UWAGA

Jest to komponent freeware systemów operacyjnych GNU i MINIX. Użytkownik ma więc pozwolenie na używanie, modyfikowanie i reprodukcję oraz dystrybucję jego pod następującymi warunkami:

1. Notka o autorze, pojawiająca się w każdym pliku źródłowym nie może zostać skasowana, ani poprawiana.

2. Forma obiektowa nie może być rozprowadzana bez źródeł.

ZOBACZ TAKŻE

ed(1), grep(1), awk(1), lex(1), regexp(5)

AUTOR
Ta strona podręcznika man została napisana przez Erica S. Raymonda <esr@snark.thyrsus.com>, a załączony pakiet jest z GNU.