===== 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: - Wczytanie linii z pliku wejściowego (lub standardowego wejścia) - Wykonanie poleceń na liniach dopasowanych w adresie (jeśli podano) - Wydrukowanie zmodyfikowanej linii 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 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 ==== * [[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]]