Unix / Linux - potoki i filtry
W tym rozdziale omówimy szczegółowo potoki i filtry w systemie Unix. Możesz połączyć ze sobą dwa polecenia, aby dane wyjściowe jednego programu stały się danymi wejściowymi następnego programu. Co najmniej dwa polecenia połączone w ten sposób tworzą potok.
Aby zrobić rurę, umieść pionowy pasek (|) w wierszu poleceń między dwoma poleceniami.
Gdy program pobiera dane wejściowe z innego programu, wykonuje na tym wejściu jakąś operację i zapisuje wynik na standardowe wyjście. Jest określany jako plikfilter.
Polecenie grep
Polecenie grep przeszukuje plik lub pliki pod kątem wierszy, które mają określony wzorzec. Składnia to -
$grep pattern file(s)
Imię "grep" pochodzi z polecenia ed (edytor liniowy systemu Unix) g/re/p co oznacza „wyszukaj wyrażenie regularne globalnie i wypisz wszystkie zawierające je wiersze”.
Wyrażenie regularne to zwykły tekst (na przykład słowo) i / lub znaki specjalne używane do dopasowywania wzorców.
Najprostszym zastosowaniem grep jest wyszukanie wzorca składającego się z jednego słowa. Można go użyć w potoku, aby tylko te wiersze plików wejściowych zawierające dany ciąg były wysyłane na standardowe wyjście. Jeśli nie podasz grepowi nazwy pliku do odczytu, czyta on swoje standardowe wejście; tak działają wszystkie programy filtrujące -
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
Istnieje wiele opcji, których można używać wraz z grep polecenie -
Sr.No. | Opcja i opis |
---|---|
1 | -v Drukuje wszystkie linie, które nie pasują do wzorca. |
2 | -n Drukuje dopasowaną linię i jej numer. |
3 | -l Wyświetla tylko nazwy plików z pasującymi wierszami (litera „l”) |
4 | -c Wyświetla tylko liczbę pasujących wierszy. |
5 | -i Dopasowuje wielkie lub małe litery. |
Użyjmy teraz wyrażenia regularnego, które mówi grepowi, aby znalazł wiersze "carol", po którym następuje zero lub inne znaki skrócone w wyrażeniu regularnym jako „. *”), a następnie „sie”. -
Tutaj używamy -i opcja wyszukiwania bez rozróżniania wielkości liter -
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
Polecenie sortowania
Plik sortpolecenie porządkuje wiersze tekstu alfabetycznie lub numerycznie. Poniższy przykład sortuje wiersze w pliku żywności -
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
Plik sortpolecenie domyślnie układa wiersze tekstu alfabetycznie. Istnieje wiele opcji kontrolujących sortowanie -
Sr.No. | Opis |
---|---|
1 | -n Sortuje numerycznie (na przykład: 10 będzie sortować po 2), ignoruje puste miejsca i tabulatory. |
2 | -r Odwraca kolejność sortowania. |
3 | -f Sortuje razem wielkie i małe litery. |
4 | +x Ignoruje pierwszy x pola podczas sortowania. |
W potoku można połączyć więcej niż dwa polecenia. Biorąc przykład z poprzedniej rury przy użyciugrep, możemy dalej sortować pliki zmodyfikowane w sierpniu według rozmiaru.
Poniższy potok składa się z poleceń ls, grep, i sort -
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
Ten potok sortuje wszystkie pliki w Twoim katalogu zmodyfikowane w sierpniu według rozmiaru i wyświetla je na ekranie terminala. Opcja sortowania + 4n pomija cztery pola (pola są oddzielone spacjami), a następnie sortuje wiersze w porządku numerycznym.
Polecenia pg i nie tylko
Długie dane wyjściowe można zwykle spakować na ekranie, ale jeśli przepuścisz więcej tekstu lub użyjesz rozszerzenia pgpolecenie jako filtr; wyświetlanie zatrzymuje się, gdy ekran jest pełny.
Załóżmy, że masz długą listę katalogów. Aby ułatwić czytanie posortowanej listy, przepuść dane wyjściowemore w następujący sposób -
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
Ekran zapełni się, gdy ekran zapełni się tekstem składającym się z linii posortowanych według rozmiaru pliku. U dołu ekranu znajduje się plikmore monit, w którym można wpisać polecenie poruszania się po posortowanym tekście.
Gdy skończysz z tym ekranem, możesz użyć dowolnego z poleceń wymienionych w omówieniu programu more.