Spis treści

sed - stream editor

Użycie sed w linii komend:

sed 'polecenia' plik
cat plik | sed 'polecenia'
sed -e 'polecenia_1' -e 'polecenia_2'

Każde polecenie sed może być poprzedzone adresem (lub adresami) określającymi, na których liniach pliku polecenie ma być wykonane.

Przykład:

sed -n '/error/p' logfile.txt

wydrukuje tylko linie zawierające słowo „error” z pliku logfile.txt.

sed '1d' logfile.txt

usunie pierwszą linię z pliku logfile.txt i wydrukuje pozostałe linie na standardowe wyjście.

Procedura działania sed:

Sed czyta plik wejściowy linia po linii i dla każdej linii wykonuje określone polecenia. Ogólny przebieg działania sed można opisać następująco:

  1. Wczytanie linii z pliku wejściowego (lub standardowego wejścia)
  2. Wykonanie poleceń na liniach dopasowanych w adresie (jeśli podano)
  3. Wydrukowanie zmodyfikowanej linii na standardowe wyjście (chyba że użyto opcji -n)

Procedura działania sed

Najważniejsze opcje:

Opcja Opis
-n nie drukuj automatycznie linii (używane z poleceniem p)
-e pozwala na wykonanie wielu poleceń sed
-i edytuj plik „na miejscu” (in-place)
-E użyj rozszerzonych wyrażeń regularnych (ERE)

Podstawowe polecenia sed

Polecenie Opis Przykład
p wydrukuj linie pasujące sed -n '/pattern/p' file
d usuń linie pasujące sed '/pattern/d' file
s/old/new/ zamień old na new sed 's/old/new/' file
s/old/new/g zamień wszystkie wystąpienia sed 's/old/new/g' file
i\ tekst wstaw tekst przed linią pasującą sed '/pattern/i\ tekst' file
a\ tekst dołącz tekst po linii pasującej sed '/pattern/a\ tekst' file
c\ tekst zamień linię pasującą na tekst sed '/pattern/c\ tekst' file
y/abc/xyz/ transliteracja znaków sed 'y/abc/xyz/' file
q zakończ przetwarzanie po linii pasującej sed '/pattern/q' file
= wydrukuj numer linii sed -n '/pattern/=' file

Adresy

Adres Znaczenie
1 linia 1
$ ostatnia linia
n linia n
m,n linie od m do n
/pattern/ linia pasująca do wzorca
/pattern1/,/pattern2/ linie od wzorca pattern1 do pattern2
n~m co m-ta linia, zaczynając od n
% wszystkie linie
1! wszystkie linie poza 1
/pattern/! linie niepasujące do wzorca
n,$ od linii n do końca
/pattern/,$ od linii pasującej do wzorca do końca

Przykłady użycia

Wypisanie pierwszych 10 linii pliku:

sed -n '1,10p' file.txt
sed '10,$d' file.txt
sed '10q' file.txt

Wypisanie linii zawierających „error”:

sed -n '/error/p' logfile.txt

Usunięcie pustych linii z pliku:

sed '/^$/d' file.txt

Zamiana „foo” na „bar” w pliku:

sed 's/foo/bar/g' file.txt

Zamiana małych liter na wielkie:

sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file.txt

Zamiana z odniesieniem do znalezionego wzorca:

sed -E 's/error_[0-9]+/[&]/g' logfile.txt

(dodaje nawiasy kwadratowe wokół dopasowanego wyrażenia

Zamiana z odniesieniem do grup:

sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' file.txt

(zamienia daty z formatu RRRR-MM-DD na DD/MM/RRRR)

Wypisz liczbę linii w pliku:

sed -n '$=' file.txt

Zasoby online