===== sed - stream editor ===== **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: - Wczytanie wiersza z pliku wejściowego (lub ze standardowego wejścia) - Wykonanie poleceń na wierszach pasujących do adresu (jeśli został podany) - Wypisanie zmodyfikowanego wiersza na standardowe wyjście (chyba że użyto opcji ''-n'') {{zajecia:so_2025_2:lab:sed.png?500|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 ==== * [[https://www.grymoire.com/Unix/Sed.html|Sed - An Introduction and Tutorial]] by Bruce Barnett * [[https://www.gnu.org/software/sed/manual/sed.html|GNU sed Manual]] * [[https://sed.js.org/|sed.js - An online sed editor and sandbox]] * [[https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/|Sed Command in Linux/Unix with Examples - GeeksforGeeks]]