Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 2 z 27/11 w kursie~15 min
Lekcje modułu (2/2)

Potoki i filtry (grep i |)

Jedną z najpotężniejszych funkcji wiersza poleceń systemu Linux jest możliwość łączenia różnych poleceń w taki sposób, aby wyjście jednego stawało się wejściem kolejnego. Technika ta jest realizowana za pomocą potoków (pipelines) i jest obsługiwana przez polecenie filtrujące grep.


Filtr tekstowy: grep

Polecenie grep (Global Regular Expression Print) wyszukuje określony tekst w jednym lub kilku plikach i wypisuje na ekranie pasujące linie:

Bash
grep "parola" [nome_file]

Przydatne opcje dla grep

  • grep -i "errore" server.log : Wykonuje wyszukiwanie nieczułe na wielkość liter (ignoruje różnicę między wielkimi i małymi literami, znajdując zarówno "Errore", jak i "ERROR").
  • grep -n "connessione" server.log : Pokazuje również odpowiedni numer linii w pliku.
  • grep -v "INFO" server.log : Odwraca wyszukiwanie, pokazując tylko te linie, które nie zawierają określonego słowa.

Łączenie poleceń: Potok (Pipeline) |

Operator potoku jest reprezentowany przez pionową kreskę |. Umożliwia on przesłanie standardowego wyjścia lewego polecenia bezpośrednio do standardowego wejścia prawego polecenia:

Bash
[comando1] | [comando2]

Na przykład, jeśli plik dziennika (log) jest ogromny i chcesz wyszukać w nim słowo bez otwierania go w całości, możesz połączyć cat i grep:

Bash
cat logs/server.log | grep ERROR

To polecenie odczytuje cały plik server.log za pomocą cat, ale zamiast wypisywać go na ekranie, przekazuje go do grep, które wyodrębni i wyświetli tylko linie zawierające słowo "ERROR".


Przykłady użycia i typowe błędy

Jeśli wykonasz wyszukiwanie słowa przy użyciu małych liter (np. "post") w pliku, który zawiera tylko wielkie litery (np. "POST"), grep nic nie zwróci:

Bash
grep "post" logs/access.log
# Output: (brak wyników, wyszukiwanie jest domyślnie czułe na wielkość liter)

Aby znaleźć linię niezależnie od tego, jak jest napisana, użyj opcji -i:

Bash
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234

Jeśli określony plik nie istnieje, grep zwróci błąd:

Bash
grep "ERROR" file_inesistente.log
# Output:
# grep: file_inesistente.log: No such file or directory

Spróbuj sam

Ejercicio 1: Cerca errori nei log

Ćwiczenie#linux.m3.l2.e1
Próby: 0Ładowanie...

Przefiltruj plik 'logs/server.log', um otwarcie i wyświetlić tylko te linie, które zawierają słowo 'ERROR' (wielkimi literami).

Ładowanie edytora...
Pokaż wskazówkę

Użyj polecenia grep, po którym podasz szukane słowo oraz ścieżkę do pliku.

Rozwiązanie dostępne po 3 próbach

Ejercicio 2: Pipeline e filtri

Ćwiczenie#linux.m3.l2.e2
Próby: 0Ładowanie...

Użyj polecenia cat, aby odczytać plik 'logs/server.log', i skieruj jego wyjście za pomocą potoku (|) do polecenia grep, aby przefiltrować i wypisać tylko te linie, które zawierają słowo 'WARNING'.

Ładowanie edytora...
Pokaż wskazówkę

Połącz cat logs/server.log z grep WARNING za pomocą znaku potoku '|'.

Rozwiązanie dostępne po 3 próbach

Ejercicio 3: Ricerca case-insensitive

Ćwiczenie#linux.m3.l2.e3
Próby: 0Ładowanie...

Wyszukaj wszystkie linie zawierające słowo 'post' (zarówno wielkimi, jak i małymi literami) w pliku 'logs/access.log', używając odpowiedniej opcji polecenia grep.

Ładowanie edytora...
Pokaż wskazówkę

Użyj grep z opcją -i, aby zignorować wielkość liter.

Rozwiązanie dostępne po 3 próbach