Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ===== sed - stream editor ===== **Użycie sed w linii komend:** <code>sed 'polecenia' plik</code> <code>cat plik | sed 'polecenia'</code> <code>sed -e 'polecenia_1' -e 'polecenia_2'</code> 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: <code>sed -n '/error/p' logfile.txt</code> wydrukuje tylko linie zawierające słowo "error" z pliku ''logfile.txt''. <code>sed '1d' logfile.txt</code> 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: <code>sed -n '1,10p' file.txt</code> <code>sed '10,$d' file.txt</code> <code>sed '10q' file.txt</code> Wypisanie linii zawierających "error": <code>sed -n '/error/p' logfile.txt</code> Usunięcie pustych linii z pliku: <code>sed '/^$/d' file.txt</code> Zamiana "foo" na "bar" w pliku: <code>sed 's/foo/bar/g' file.txt</code> Zamiana małych liter na wielkie: <code>sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file.txt</code> Zamiana z odniesieniem do znalezionego wzorca: <code>sed -E 's/error_[0-9]+/[&]/g' logfile.txt</code> (dodaje nawiasy kwadratowe wokół dopasowanego wyrażenia Zamiana z odniesieniem do grup: <code>sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' file.txt</code> (zamienia daty z formatu RRRR-MM-DD na DD/MM/RRRR) Wypisz liczbę linii w pliku: <code>sed -n '$=' file.txt</code> ==== 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]]