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.