Narzędzia użytkownika

Narzędzia witryny


so:pipes_filters

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
so:pipes_filters [2023/04/01 15:41]
jkonczak utworzono
so:pipes_filters [2026/04/27 23:37] (aktualna)
jkonczak
Linia 36: Linia 36:
 ~~Zadanie.#​~~ Jakim złożeniem skrótów przesuwa się kursor o 5 słów? ~~Zadanie.#​~~ Jakim złożeniem skrótów przesuwa się kursor o 5 słów?
  
-~~Zadanie.#​~~ Jakim skrótów ​wstawia się ostatnie słowo z poprzedniego polecenia w historii?+~~Zadanie.#​~~ Jakim skrótem ​wstawia się ostatnie słowo z poprzedniego polecenia w historii?
  
 ~~Zadanie.#​~~ Jakim złożeniem skrótów wstawia się trzecie od końca słowo z poprzedniego polecenia w historii? ~~Zadanie.#​~~ Jakim złożeniem skrótów wstawia się trzecie od końca słowo z poprzedniego polecenia w historii?
Linia 57: Linia 57:
 <​small>​ <​small>​
  
-''​vi''​ jest wpisane w standard [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​vi.html|POSIX]].+''​vi''​ jest wpisane w standard [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​vi.html|POSIX]].
 \\ \\
 Jest też częścią minimalistycznych zestawów narzędzi takich jak busybox i toybox. Jest też częścią minimalistycznych zestawów narzędzi takich jak busybox i toybox.
Linia 85: Linia 85:
 === Inne === === Inne ===
  
-  * [[https://​joe-editor.sourceforge.io/​joe]]+  * [[https://​joe-editor.sourceforge.io/​|joe]]
   * mcedit – edytor zintegrowany z [[https://​en.wikipedia.org/​wiki/​Midnight_Commander|mc]]   * mcedit – edytor zintegrowany z [[https://​en.wikipedia.org/​wiki/​Midnight_Commander|mc]]
   * [[https://​micro-editor.github.io/​|micro]]   * [[https://​micro-editor.github.io/​|micro]]
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 mniejszerozwiązywalne
 przez takie proste programy. przez takie proste programy.
  
 <​small>​ <​small>​
 Dla przykładu: powiedzmy że chcesz dowiedzieć się ile procesów ma każdy z użytkowników systemu. Dla przykładu: powiedzmy że chcesz dowiedzieć się ile procesów ma każdy z użytkowników systemu.
 +<​html><​div style="​margin-top:​-1.2em"></​div></​html>​
   - Wiesz że ''​ps -ef''​ wypisuje procesy, więc zapisujesz do pliku ich listę: ''​ps -ef > ps_output''​.   - Wiesz że ''​ps -ef''​ wypisuje procesy, więc zapisujesz do pliku ich listę: ''​ps -ef > ps_output''​.
   - Potrzebujesz tylko pierwszej kolumny – nazwy użytkownia,​ \\ Żeby wyciąć tylko pierwszą (oddzielaną spacją) kolumnę, używasz komendy ''​cut --delimiter ' ' --field 1 < ps_output > cut_output''​.   - Potrzebujesz tylko pierwszej kolumny – nazwy użytkownia,​ \\ Żeby wyciąć tylko pierwszą (oddzielaną spacją) kolumnę, używasz komendy ''​cut --delimiter ' ' --field 1 < ps_output > cut_output''​.
   - Żeby skorzystać z programu który liczy powtarzające się linie, musisz mieć je obok siebie. \\ Więc komendą ''​sort < cut_output > sort_output''​ sortujesz plik.   - Żeby skorzystać z programu który liczy powtarzające się linie, musisz mieć je obok siebie. \\ Więc komendą ''​sort < cut_output > sort_output''​ sortujesz plik.
   - Na końcu korzystasz z komendy ''​uniq --count < sort_output''​ która pomija powtarzające się linie i przed każdą linię wpisuje ile razy się powtórzyła.   - Na końcu korzystasz z komendy ''​uniq --count < sort_output''​ która pomija powtarzające się linie i przed każdą linię wpisuje ile razy się powtórzyła.
 +<​html><​div style="​margin-top:​-1.2em"></​div></​html>​
 Ale: żeby wykonać takie zadanie powstały (niepotrzebne) pliki ''​ps_output'',​ ''​cut_output''​ i ''​sort_output''​. Ale: żeby wykonać takie zadanie powstały (niepotrzebne) pliki ''​ps_output'',​ ''​cut_output''​ i ''​sort_output''​.
 </​small>​ </​small>​
Linia 159: 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 214: 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 ​dokumentacja twojej implementacji ​komendy ''​grep''​.+\\ 
 +Podsumowanie tych gramatyk znajdziesz też 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 275: Linia 283:
 ~~Zadanie.#​~~ Usuń z wyniku komendy ​ ~~Zadanie.#​~~ Usuń z wyniku komendy ​
 ''​egrep '​^[Ee]{2}'​ /​usr/​share/​myspell/​en_US.dic''​ ukośnik i wszystko za nim. ''​egrep '​^[Ee]{2}'​ /​usr/​share/​myspell/​en_US.dic''​ ukośnik i wszystko za nim.
 +\\ <​small>​ (Użyj pliku ''/​usr/​share/​hunspell/​en_US.dic''​ jeżeli nie masz
 +podanego wyżej pliku.)</​small>​
  
 ==== sort ==== ==== sort ====
Linia 287: Linia 297:
   * ''​sort -k4,​6''​ używa pól 4, 5 i 6   * ''​sort -k4,​6''​ używa pól 4, 5 i 6
   * <​del>''​sort -k5,​4''</​del>​ jest nieprawidłowe   * <​del>''​sort -k5,​4''</​del>​ jest nieprawidłowe
-  * ''​sort -k5,5 -k4,​4''​ używa pól 5 and 4+  * ''​sort -k5,5 -k4,​4''​ używa pól 5 4
 Klucze sortowania mogą mieć opcje, np. **''​-n''​** sortuje numerycznie a Klucze sortowania mogą mieć opcje, np. **''​-n''​** sortuje numerycznie a
 **''​-r''​** odwraca kierunek. **''​-r''​** odwraca kierunek.
Linia 361: Linia 371:
 ~~Zadanie.#​~~ Przefiltruj ''​man wc''​ przez ''​cat''​. Potem przefiltruj ''​man wc''​ przez ''​wc''​. Ile słów jest w ''​man wc''?​ ~~Zadanie.#​~~ Przefiltruj ''​man wc''​ przez ''​cat''​. Potem przefiltruj ''​man wc''​ przez ''​wc''​. Ile słów jest w ''​man wc''?​
  
-~~Zadanie.#​~~ Sprawdź wynik ''​wc /etc/motd /etc/SUSE-brand''​.+~~Zadanie.#​~~ Sprawdź wynik ''​wc /etc/profile ​/etc/os-release''​.
  
 ~~Zadanie.#​~~ Polecenie ''​perl -e '​printf "​%d\n",​ (int rand(6)+1)+(int rand(6)+1) for(1..100)'<​nowiki></​nowiki>''​ rzuca 100 razy 2d6. ~~Zadanie.#​~~ Polecenie ''​perl -e '​printf "​%d\n",​ (int rand(6)+1)+(int rand(6)+1) for(1..100)'<​nowiki></​nowiki>''​ rzuca 100 razy 2d6.
Linia 398: Linia 408:
 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/​9699919799/​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:​]''​).
  
 Uwaga: ''​tr''​ nie przyjmuje nazw plików w liście argumentów - potrafi czytać tylko Uwaga: ''​tr''​ nie przyjmuje nazw plików w liście argumentów - potrafi czytać tylko
Linia 419: Linia 430:
 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 426: Linia 437:
 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 441: Linia 450:
 klawisz, np. //​spacja//​). klawisz, np. //​spacja//​).
  
-Z większością systemów operacyjnych instalowany jest program **''​[[https://​en.wikipedia.org/​wiki/​More_(komenda)|more]]''​**+Z większością systemów operacyjnych instalowany jest program **''​[[https://​pl.wikipedia.org/​wiki/​More_(polecenie)|more]]''​**
 będący prostym pagerem. będący prostym pagerem.
 \\ \\
Linia 472: Linia 481:
 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 tym numerze+  * liczba – przesuwa ​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)
so/pipes_filters.1680356475.txt.gz · ostatnio zmienione: 2023/04/01 15:41 (edycja zewnętrzna)