Ślad: • sed

sed - stream editor

Action unknown: siteexport_addpage

Użycie sed w wierszu poleceń:

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, w których wierszach pliku zostanie ono wykonane.

Przykład:

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

wypisze tylko wiersze zawierające słowo „error” z pliku logfile.txt.

sed '1d' logfile.txt

usunie pierwszy wiersz z pliku logfile.txt i wypisze pozostałe wiersze na standardowe wyjście.

Procedura działania sed:

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

  1. Wczytanie wiersza z pliku wejściowego (lub ze standardowego wejścia)
  2. Wykonanie poleceń na wierszach pasujących do adresu (jeśli został podany)
  3. Wypisanie zmodyfikowanego wiersza na standardowe wyjście (chyba że użyto opcji -n)

Procedura działania sed

Najważniejsze opcje:

Opcja Opis
-n nie wypisuj automatycznie wierszy (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 wypisz pasujące wiersze sed -n '/pattern/p' file '' | | ''d usuń pasujące wiersze 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 wiersz 1
$ ostatni wiersz
n wiersz n
m,n wiersze od m do n
/pattern/ wiersz pasujący do wzorca
/pattern1/,/pattern2/ linie od wzorca pattern1 do pattern2
n~m co m-ty wiersz, począwszy od n
1,$ wszystkie wiersze
1! wszystkie wiersze poza pierwszym
/pattern/! wiersze niepasujące do wzorca
n,$ od wiersza n do końca
/pattern/,$ od wiersza pasującego do wzorca do końca

Przykłady użycia

Wypisanie pierwszych 10 wierszy pliku:

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

Wypisanie wierszy 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ę wierszy w pliku:

sed -n '$=' file.txt

Zasoby online