Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja | |||
|
so:pipes_filters [2025/04/16 11:58] jkonczak [Edycja linii poleceń] |
so:pipes_filters [2026/04/20 22:41] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 104: | Linia 104: | ||
| że każdy program ma [[https://en.wikipedia.org/wiki/Unix_philosophy|solidnie wykonywać jedno dobrze określone zadanie]]. | że każdy program ma [[https://en.wikipedia.org/wiki/Unix_philosophy|solidnie wykonywać jedno dobrze określone zadanie]]. | ||
| \\ | \\ | ||
| - | Żeby zrobić skomplikowane zadania, należy podzielić je na mniejsze rozwiązywalne | + | Żeby zrobić skomplikowane zadania, należy podzielić je na mniejsze, rozwiązywalne |
| przez takie proste programy. | przez takie proste programy. | ||
| Linia 161: | Linia 161: | ||
| Dodaj na koniec poprzedniej komendy przekazanie jej wyniku do ''cat -n''. | Dodaj na koniec poprzedniej komendy przekazanie jej wyniku do ''cat -n''. | ||
| - | ~~Zadanie.#~~ Połącz w potok komendy ''ps -eF'' i ''fold'' | + | ~~Zadanie.#~~ Połącz w potok komendy ''ps -ef'' i ''fold'' |
| ~~Zadanie.#~~ Stwórz nazwany potok //p//. Przekieruj wejście programu ''fold'' | ~~Zadanie.#~~ Stwórz nazwany potok //p//. Przekieruj wejście programu ''fold'' | ||
| Linia 216: | Linia 216: | ||
| <small> | <small> | ||
| ''grep'' pozwala na wybór jednej z kilku gramatyk wyrażeń regularnych. | ''grep'' pozwala na wybór jednej z kilku gramatyk wyrażeń regularnych. | ||
| - | POSIX [[https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html|określa]] | + | POSIX [[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap09.html|określa]] |
| dwie: //basic// (domyślną) i //extended// (używaną przez ''egrep'' i ''grep -E''). | dwie: //basic// (domyślną) i //extended// (używaną przez ''egrep'' i ''grep -E''). | ||
| - | Szczegółów szukaj w dokumentacja twojej implementacji komendy ''grep''. | + | \\ |
| + | Podsumowanie tych gramatyk znajdziesz też w Linuksie pod | ||
| + | ''[[https://man7.org/linux/man-pages/man7/regex.7.html|man 7 regex]]'' oraz na | ||
| + | [[https://en.wikipedia.org/wiki/Regular_expression#IEEE_POSIX_Standard|wikipedii]]. | ||
| + | \\ | ||
| + | Informację o innych gramatykach wspieranych przez twoją implementację komendy | ||
| + | ''grep'' znajdziesz w dokumentacji konkretnej implementacji. | ||
| Domyślnie wyrażenia rozróżniają wielkość liter. Aby to zmienić, dodaj opcję ''-i''. | Domyślnie wyrażenia rozróżniają wielkość liter. Aby to zmienić, dodaj opcję ''-i''. | ||
| Linia 400: | Linia 406: | ||
| Np. ''tr -s 123 npn <<< 123_132_13n_ppp'' wypisze ''npn_np_n_p''. | Np. ''tr -s 123 npn <<< 123_132_13n_ppp'' wypisze ''npn_np_n_p''. | ||
| - | Przełącznik ''-c'' powoduje zamianę znaków których nie ma w liście. | + | Przełącznik ''-c'' powoduje zamianę/usunięcie znaków których nie ma w liście. |
| + | Np. ''tr -c a-z _'' zamieni wszystko co nie jest małą literą na podkreślnik. | ||
| Listy mogą zawierać zakresy znaków (np. ''[0-9]'', ''[a-f]'') i [[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap07.html#tag_07_03_01|klasy znaków]] (np. ''[:alnum:]'', ''[:space:]''). | Listy mogą zawierać zakresy znaków (np. ''[0-9]'', ''[a-f]'') i [[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap07.html#tag_07_03_01|klasy znaków]] (np. ''[:alnum:]'', ''[:space:]''). | ||
| Linia 421: | Linia 428: | ||
| i domyślnie wypisuje ją po jego wykonaniu. | i domyślnie wypisuje ją po jego wykonaniu. | ||
| Najprostsza komenda wykonująca znajdź/zastąp to ''sed 's/regexp/replacement/'<nowiki></nowiki>''. | Najprostsza komenda wykonująca znajdź/zastąp to ''sed 's/regexp/replacement/'<nowiki></nowiki>''. | ||
| - | ''sed'' jest kompletne w sensie Turinga. Jeśli starczy czasu w semestrze, ''sed'' będzie omawiany później. | + | ''sed'' jest kompletne w sensie Turinga. |
| ==== awk ==== | ==== awk ==== | ||
| Linia 428: | Linia 435: | ||
| tekstu, również przetwarzającym tekst linia po linii na podstawie podanego skryptu. | tekstu, również przetwarzającym tekst linia po linii na podstawie podanego skryptu. | ||
| W ''awk'' skrypt składa się z reguł – par ''warunek {instrukcje}'', gdzie warunek | W ''awk'' skrypt składa się z reguł – par ''warunek {instrukcje}'', gdzie warunek | ||
| - | określa dopasowanie do linii (bądź początku/końca przetwarzania/pliku). \\ | + | określa dopasowanie do linii (bądź początku/końca przetwarzania/pliku). |
| - | ''awk'' nie jest omawiany na zajęciach z SOp; jest omawiany w ramach obieralnego | + | |
| - | przedmiotu Języki formalne i kompilatory. | + | |
| </small> | </small> | ||
| Linia 474: | Linia 479: | ||
| Po uruchomieniu ''less'' można wyświetlić pomoc naciskając ''h''. Wybór przydatnych skrótów: | Po uruchomieniu ''less'' można wyświetlić pomoc naciskając ''h''. Wybór przydatnych skrótów: | ||
| * //spacja// lub //PgDown// / //PgUp// – idź do następnej / poprzedniej strony | * //spacja// lub //PgDown// / //PgUp// – idź do następnej / poprzedniej strony | ||
| - | * liczba – skacze do linii o tym numerze | + | * liczba – przesuwa o podaną ilość linii |
| * liczba zakończona //%// – skacze do tej części dokumentu | * liczba zakończona //%// – skacze do tej części dokumentu | ||
| - | * //g// / //G// – skacze na początek / koniec dokumentu | + | * //g// / //G// – skacze na początek / koniec dokumentu \\ <small>liczba zakończona //g// / //G// – skacze do podanej linii dokumentu</small> |
| * // /wzorzec // / //?wzorzec// — wyszukuje //wzorca// do przodu / do tyłu \\ //n// / //N// – powtarza wyszukiwane w tym samym / odwrotnym kierunku | * // /wzorzec // / //?wzorzec// — wyszukuje //wzorca// do przodu / do tyłu \\ //n// / //N// – powtarza wyszukiwane w tym samym / odwrotnym kierunku | ||
| * //s// – zapisuje dane do pliku (przydatne jeśli less czyta z potoku) | * //s// – zapisuje dane do pliku (przydatne jeśli less czyta z potoku) | ||