- STDIN (0) - Standardowe wejście
- STDOUT (1) - Wyjście standardowe
- STDERR (2) - Błąd standardowy
Kiedy zamierzamy pracować ze sztuczkami „potoku”, „pipe” pobierze STDOUT polecenia i przekaże je do STDIN następnego polecenia.
Sprawdźmy niektóre z najczęstszych sposobów włączenia polecenia „potok” do codziennego użytku.
Polecenie rury
Podstawowe zastosowanie
Lepiej omówić metodę pracy „fajki” na żywym przykładzie, prawda? Zacznijmy. Następujące polecenie powie „pacman”, domyślnemu menedżerowi pakietów dla Archa i wszystkich dystrybucji opartych na Arch, aby wydrukować wszystkie zainstalowane pakiety w systemie.
pacman -Qqe
To naprawdę DŁUGA lista pakietów. A co powiesz na zebranie tylko kilku składników?!? Moglibyśmy użyć „grepa”. Ale jak? Jednym ze sposobów byłoby zrzucenie wyjścia do pliku tymczasowego, „pogrepowanie” żądanego wyjścia i usunięcie pliku. Ta seria zadań sama w sobie może zostać przekształcona w skrypt. Ale skryptujemy tylko dla bardzo dużych rzeczy. W tym zadaniu przywołajmy moc „fajki”!
pacman -Qqe | grep
Niesamowite, prawda?? „|” znak jest wywołaniem polecenia „potok”. Pobiera STDOUT z lewej sekcji i podaje je do STDIN prawej sekcji.
We wspomnianym przykładzie polecenie „pipe” faktycznie przekazało dane wyjściowe na końcu części „grep”. Oto jak to się rozgrywa.
pacman -Qqe > ~/Desktop/pacman_package.tekstgrep python ~/Desktop/pacman_package.tekst
Wiele rurociągów
Zasadniczo nie ma nic specjalnego w zaawansowanym użyciu polecenia „potok”. Od Ciebie zależy, jak z niego korzystać.
Na przykład zacznijmy od ułożenia wielu rur.
pacman -Qqe | grep p | grep t | grep py
Dane wyjściowe polecenia pacmana są coraz bardziej filtrowane przez „grep” przez szereg potoków.
Czasami, gdy pracujemy z zawartością pliku, może on być naprawdę duży. Znalezienie odpowiedniego miejsca naszego pożądanego wpisu może być trudne. Wyszukajmy wszystkie wpisy zawierające cyfry 1 i 2.
kot demo.tekst | grep -n 1 | grep -n 2
Manipulowanie listą plików i katalogów
Co zrobić, gdy masz do czynienia z katalogiem zawierającym TONY plików?? Przewijanie całej listy jest dość denerwujące. Jasne, dlaczego nie uczynić tego bardziej znośnym z fajką?? W tym przykładzie sprawdźmy listę wszystkich plików w folderze „/usr/bin”.
ls-l
Tutaj „ls” drukuje wszystkie pliki i ich informacje. Następnie „rura” przekazuje ją do „więcej”, aby z tym pracować. Jeśli nie wiesz, „więcej” to narzędzie, które zamienia teksty w jeden ekran na raz. Jest to jednak stare narzędzie i zgodnie z oficjalną dokumentacją „mniej” jest bardziej zalecane.
ls -l /usr/bin | mniej
Sortowanie danych wyjściowych
Istnieje wbudowane narzędzie „sortuj”, które pobiera wpisany tekst i je sortuje. To narzędzie to prawdziwa perełka, jeśli pracujesz z czymś naprawdę brudnym. Na przykład, mam ten plik pełen losowych ciągów.
kot demo.tekst
Po prostu potokuj, aby „sortować”.
kot demo.tekst | sortować
Tak jest lepiej!
Drukowanie dopasowań określonego wzoru
ls-l | odnaleźć ./ -type f -name "*.txt" -exec grep 00110011 \;
To dość pokręcona komenda, prawda? Na początku „ls” wyświetla listę wszystkich plików w katalogu. Narzędzie „znajdź” pobiera dane wyjściowe, wyszukuje „.txt” i wzywa „grep” do wyszukania „00110011”. To polecenie sprawdzi każdy plik tekstowy w katalogu z rozszerzeniem TXT i wyszuka dopasowania.
Drukuj zawartość pliku z określonego zakresu
Kiedy pracujesz z dużym plikiem, często pojawia się potrzeba sprawdzenia zawartości określonego zakresu. Możemy to zrobić dzięki sprytnemu połączeniu „kot”, „głowa”, „ogon” i oczywiście „fajka”. Narzędzie „głowa” wyświetla pierwszą część treści, a „ogon” wyprowadza ostatnią część.
kotkot
Unikalne wartości
Praca ze zduplikowanymi wyjściami może być dość denerwująca. Czasami zduplikowane dane wejściowe mogą powodować poważne problemy. W tym przykładzie rzućmy „uniq” na strumień tekstu i zapiszmy go w osobnym pliku.
Na przykład, oto plik tekstowy zawierający dużą listę liczb o długości 2 cyfr. Na pewno są tu zduplikowane treści, prawda?
duplikat kota.tekst | sortować
Przeprowadźmy teraz proces filtrowania.
duplikat kota.tekst | sortuj | uniq > unikalny.tekst
Sprawdź wyniki.
nietoperz wyjątkowy.tekst
Wygląda lepiej!
Rury błędów
To ciekawa metoda orurowania. Ta metoda służy do przekierowania STDERR na STDOUT i kontynuowania orurowania. Jest to oznaczone symbolem „|&” (bez cudzysłowów). Na przykład stwórzmy błąd i wyślijmy wynik do innego narzędzia. W tym przykładzie po prostu wpisałem jakieś przypadkowe polecenie i przekazałem błąd do „grepa”.
adsfds |& grep n
Końcowe przemyślenia
Chociaż sama „fajka” jest dość uproszczona, sposób jej działania oferuje bardzo wszechstronny sposób wykorzystania metody na nieskończone sposoby. Jeśli interesują Cię skrypty Bash, jest to o wiele bardziej przydatne. Czasami możesz po prostu robić szalone rzeczy wprost! Dowiedz się więcej o skryptach Bash.