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:
-n)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) |
| 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 '' |
| 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 |
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