Polecenie Pipe, Grep i Sort w systemie Linux/Unix z przykładami

⚡ Inteligentne podsumowanie

Polecenia pipe, grep i sort w systemach Linux i Unix łączą i filtrują tekst: pipe przekazuje dane wyjściowe jednego polecenia do następnego, grep wyszukuje wzorce, a sort porządkuje wiersze, podczas gdy filtry przekształcają dane znajdujące się między nimi.

  • 🔗 Rura: Symbol potoku | przekazuje wynik jednego polecenia jako dane wejściowe do następnego.
  • 📄 Stronicowanie: cat przełączony na less, pg lub more pokazuje długi plik ekran po ekranie.
  • 🔍 chwyt: Polecenie grep przeszukuje plik w celu znalezienia wierszy pasujących do ciągu lub wzorca.
  • 🎚️ opcje grep: Flagi takie jak -v, -c, -n, -i i -l odwracają, liczą, numerują, ignorują wielkość liter i wyświetlają pliki.
  • 🔤 sortować: Polecenie sort porządkuje wiersze pliku, przy czym -r, -n i -f oznaczają kolejność odwrotną, numeryczną i ignorowanie wielkości liter.
  • 🧪 Filtry: Polecenia filtrowania, takie jak grep, sort, awk, sed i wc przetwarzają przekazane dane wejściowe i generują dane wyjściowe.
  • 🤖 Pomoc AI: Asystenci AI i GitHub Copilot mogą budować i objaśniać potoki, polecenia grep i sort.

Polecenia pipe, grep i sort w systemach Linux i Unix z przykładami

Pipes, grep i sort to jedne z najczęściej używanych narzędzi na Linux wiersz poleceń, ponieważ pozwalają one łączyć małe polecenia w jeden wydajny przepływ pracy. Ta strona wyjaśnia każde z nich za pomocą przykładów, a następnie pokazuje, jak filtry je łączą.

Co to jest potok w systemie Linux?

Potok to polecenie w systemie Linux, które pozwala na użycie dwóch lub więcej poleceń w taki sposób, że dane wyjściowe jednego polecenia służą jako dane wejściowe dla następnego. Krótko mówiąc, dane wyjściowe każdego procesu są przekazywane bezpośrednio jako dane wejściowe do następnego, jak w potoku. Symbol „|” oznacza potok.

Potoki pozwalają na łączenie dwóch lub więcej poleceń jednocześnie i uruchamianie ich po kolei. Możesz używać zaawansowanych poleceń, które błyskawicznie wykonują złożone zadania.

Zrozummy to na przykładzie.

Gdy używasz polecenia „cat” w celu wyświetlenia pliku rozciągającego się na wiele stron, monit szybko przechodzi do ostatniej strony pliku i nie widzisz zawartości znajdującej się w środku.

Aby tego uniknąć, możesz przekazać dane wyjściowe polecenia „cat” do polecenia „less”, które wyświetli tylko jeden długi pasek zawartości na raz.

cat filename | less

Ilustracja by to wyjaśniła. Poniższy diagram pokazuje, jak potok przekazuje dane wyjściowe jednego polecenia do następnego.

Schemat potoku Linux przekazującego dane wyjściowe jednego polecenia jako dane wejściowe do następnego

Polecenia „pg” i „więcej”.

Zamiast polecenia „less” możesz również użyć polecenia pg lub more:

cat Filename | pg

or

cat Filename | more

Następnie możesz przeglądać plik w przystępnych fragmentach i przewijać w dół, naciskając po prostu klawisz Enter. Poniższy zrzut ekranu przedstawia plik stronicowany poleceniem more.

kot przesłał polecenie do większej liczby stronicowań długiego pliku ekran po ekranie

Polecenie „grep”.

Załóżmy, że chcesz wyszukać konkretne informacje, np. kod pocztowy, w pliku tekstowym.

Możesz ręcznie przejrzeć treść, aby trace informacji. Lepszą opcją jest użycie grep polecenie. Skanuje dokument w poszukiwaniu potrzebnych informacji i prezentuje wynik w żądanym formacie.

Składnia:

grep search_string

Zobaczmy to w akcji. Zrzut ekranu poniżej pokazuje wynik wyszukiwania.

polecenie grep przeszukujące przykładowy plik w poszukiwaniu ciągów Apple i Eat

W tym przypadku polecenie grep przeszukało plik „sample” pod kątem ciągów „Apple” i „Eat”. Z tym poleceniem można użyć następujących opcji.

Option Funkcjonować
-v Pokazuje wszystkie wiersze, które nie pasują do szukanego ciągu
-c Wyświetla tylko liczbę pasujących linii
-n Pokazuje pasującą linię i jej numer
-i Dopasowuje zarówno wielkie, jak i małe litery
-l Pokazuje tylko nazwę pliku z ciągiem

Wypróbujmy opcję „-i” w tym samym pliku, co powyżej. Poniższy zrzut ekranu pokazuje wynik bez uwzględniania wielkości liter.

grep -i wykonuje wyszukiwanie bez uwzględniania wielkości liter dla litery a

Używając opcji „-i”, grep odfiltrował ciąg „a” (bez względu na wielkość liter) ze wszystkich wierszy.

Polecenie sortowania

Polecenie to pomaga w alfabetycznym sortowaniu zawartości pliku.

Składnia tego polecenia to:

sort Filename

Rozważ zawartość pliku pokazaną poniżej za pomocą symbolu cat.

polecenie cat pokazujące nieposortowaną zawartość pliku abc

Uruchomienie polecenia sort powoduje uporządkowanie tych wierszy w kolejności alfabetycznej, jak pokazano poniżej.

polecenie sortowania porządkujące zawartość pliku abc w kolejności alfabetycznej

Istnieją również rozszerzenia tego polecenia, które wymieniono poniżej.

Option Funkcjonować
-r Reversesortowanie
-n Sortuje numerycznie
-f Sortowanie bez uwzględniania wielkości liter

Poniższy przykład pokazuje odwrotne sortowanie zawartości pliku „abc”.

polecenie sort -r odwraca sortowanie zawartości pliku abc

Co to jest filtr?

Linux ma wiele poleceń filtrujących, takich jak awk, grep, sed, spell i wc. Filtr pobiera dane wejściowe z jednego polecenia, wykonuje pewne przetwarzanie i zwraca dane wyjściowe.

Podczas przesyłania dwóch poleceń, „przefiltrowane” dane wyjściowe pierwszego polecenia są przekazywane do następnego. Poniższy diagram ilustruje, jak filtr wpisuje się w potok.

Schemat filtru Linuxa pobierającego dane wejściowe, przetwarzającego je i generującego dane wyjściowe

Zrozumiemy to na przykładzie. Mamy następujący plik „sample”, pokazany poniżej z symbolem „cat”.

polecenie cat wyświetlające zawartość pliku przykładowego przed filtrowaniem

Chcemy wyróżnić tylko wiersze niezawierające znaku „a”, ale wynik powinien być w odwrotnej kolejności. W tym celu można użyć następującej składni:

cat sample | grep -v a | sort -r

Przyjrzyjmy się wynikowi pokazanemu na zrzucie ekranu poniżej.

polecenie cat przepuściło polecenia grep -v i sort -r, tworząc wiersze w odwrotnej kolejności bez litery a

FAQ

Potok (|) przesyła dane wyjściowe jednego polecenia bezpośrednio do innego polecenia, łącząc je ze sobą. Przekierowanie (> i <) łączy polecenie z plikiem, zapisując dane wyjściowe do pliku lub odczytując dane wejściowe z pliku. Potoki łączą polecenia; przekierowanie łączy polecenia i pliki.

grep to skrót od Global Regular Expression Print (Global Regular Expression Print). Skanuje plik lub dane wejściowe wiersz po wierszu i wyświetla każdy wiersz pasujący do podanego wzorca. Nazwa pochodzi od starego polecenia edytora ed g/re/p, które wykonywało to samo wyszukiwanie.

Polecenie sort ma opcję -u, która sortuje i usuwa duplikaty wierszy w jednym kroku: sort -u plik. Można również przekazać polecenie sort do polecenia uniq, np. sort plik | uniq, ponieważ uniq usuwa tylko duplikaty, które już sąsiadują.

Zakończ potok przekierowaniem: polecenie cat sample | grep -va | sort -r > result.txt zapisuje wynik końcowy do pliku. Aby wyświetlić wynik na ekranie i jednocześnie go zapisać, użyj polecenia tee.

Polecenie grep przeszukuje pliki w poszukiwaniu wierszy pasujących do wzorca tekstowego. Polecenie find lokalizuje pliki i katalogi według nazwy, rozmiaru, typu lub daty. Krótko mówiąc, grep sprawdza zawartość pliku, podczas gdy find przeszukuje pliki w całym drzewie katalogów.

Polecenie tee odczytuje dane z potoku i zapisuje je jednocześnie na ekranie oraz w jednym lub kilku plikach, na przykład grep error log | tee errors.txt. Pozwala to na zapisywanie pośrednich danych wyjściowych bez przerywania potoku.

Asystenci AI mogą sugerować właściwy ciąg poleceń potokowych na podstawie żądania napisanego prostym językiem, wyjaśniać nieznane flagi grep lub sort oraz wykrywać błędy w potoku. Narzędzia uczenia maszynowego skanują również potokowe dane wyjściowe logów, aby sygnalizować anomalie, które zostałyby pominięte przez ręczne filtrowanie.

Tak. Drugi pilot GitHub może generować potoki łączące polecenia cat, grep i sort na podstawie krótkiego komentarza opisującego, czego potrzebujesz, i wykonywać polecenia w miarę ich wpisywania. RevPorównaj sugerowany potok z danymi przykładowymi, zwłaszcza opcje, które zmieniają kolejność wierszy lub je usuwają.

Podsumuj ten post następująco: