CodeGym /Kursy /Docker SELF /Użycie `grep` do wyszukiwania tekstu

Użycie `grep` do wyszukiwania tekstu

Docker SELF
Poziom 8 , Lekcja 0
Dostępny

Użycie grep do wyszukiwania tekstu

1. Czym jest grep?

grep — to potężne narzędzie wiersza poleceń do wyszukiwania linii pasujących do określonego wzorca w plikach tekstowych. Pomyśl o grep jak o "detektywie" w świecie Linuxa: znajduje "dowody" (szablony tekstowe) w "sprawach" (plikach) i przekazuje, gdzie one się znajdują.

Nazwa grep pochodzi od komendy w edytorze tekstu ed: g/re/p, co oznacza "globalne wyszukiwanie wyrażenia regularnego i wyświetlanie znalezionych wyników".

grep jest używany wszędzie: od wyszukiwania błędów w logach po analizowanie danych systemowych. Jest bezproblemowy i gotowy do pracy z dowolnym tekstem — czy to twoje dzienniki, czy logi z serwera.


2. Podstawowa składnia

Struktura komendy:

grep [opcje] "wzorzec" plik
  • [opcje] — dodatkowe ustawienia komendy.
  • "wzorzec" — tekst lub wyrażenie regularne do wyszukiwania.
  • plik — nazwa pliku lub plików, w których wykonywane jest wyszukiwanie.

Jeśli chcesz szukać tekstu w kilku plikach, po prostu wymień je, oddzielając spacją, lub skorzystaj z symboli * i ? do pracy z grupami plików.

Przykład:

grep "error" /var/log/syslog

3. Opcje dla wygodnego wyszukiwania

1. -i: Ignorowanie wielkości liter

Ta opcja pozwala na wyszukiwanie tekstu niezależnie od tego, czy znajduje się on w wielkich czy małych literach. Na przykład Error, ERROR i error zostaną znalezione jednocześnie.

Przykład użycia:

grep -i "error" application.log

2. -v: Odwrócone wyszukiwanie

With great power comes great responsibility... Czasami ważne jest, aby znaleźć wszystko, co nie pasuje do wzorca. Na przykład wykluczyć linie zawierające "debug".

Przykład użycia:

grep -v "debug" system.log

3. -n: Wyświetlanie linii z numerami

Kiedy plik zawiera wiele linii, przydatne jest podanie, gdzie dokładnie znaleziono dopasowanie. Flaga -n dodaje numer linii do każdej znalezionej linii.

Przykład użycia:

grep -n "error" server.log

4. -r lub -R: Rekurencyjne wyszukiwanie

Możesz wyszukiwać wzorce tekstu w plikach nie tylko w bieżącym katalogu, ale również we wszystkich jego podkatalogach. Uważaj, jeśli masz tysiące plików!

Przykład użycia:

grep -r "keyword" /home/user/documents

4. Przykłady użycia

1. Wyszukiwanie dokładnego dopasowania

Szukamy słowa "hello" w pliku example.txt:

grep "hello" example.txt

2. Wyszukiwanie fragmentu linii

Spróbujemy znaleźć linie zawierające nazwę użytkownika, na przykład "John":

grep "John" database.txt

3. Wyszukiwanie z uwzględnieniem wielkości liter

Szukamy dokładnie "ERROR", bez mieszania z "error" lub "Error":

grep "ERROR" log.txt

4. Rekurencyjne wyszukiwanie w katalogu

Szukamy linii z komunikatem "fatal error" we wszystkich plikach w bieżącym katalogu oraz w jego podkatalogach:

grep -r "fatal error" .

5. Wyszukiwanie odwrócone

Wypisanie wszystkich linii, które nie zawierają słowa "error":

grep -v "error" server.log

6. Wyświetlenie tylko pierwszych 10 dopasowań

Jeśli log jest bardzo długi, możesz ograniczyć się do pierwszych N komunikatów:

grep "error" log.txt | head -n 10

7. Zliczanie linii z błędami

Możesz po prostu policzyć ilość linii z błędami, aby mentalnie przygotować się do pracy:

grep -c "error" log.txt

8. Używanie filtrów

Jeśli w logu jest dużo tekstowego śmiecia, użyj filtrów. Na przykład poniżej szukamy w logach błędów dotyczących pamięci:

cat /var/log/syslog | grep "memory"

5. Łączenie grep z innymi poleceniami

W Linuxie polecenia często działają zespołowo (wybacz za tautologię). Dzięki użyciu potoków |, możemy łączyć grep z innymi narzędziami. Rzućmy okiem na kilka praktycznych przykładów.

1. Filtrowanie wiadomości systemowych

Chcesz zobaczyć tylko błędy urządzeń USB? Proste!

dmesg | grep "usb"

Tutaj przekazujemy wynik polecenia dmesg (podgląd wiadomości systemowych) do grep.

2. Zastosowanie filtrów

Jeśli w logach jest dużo "śmieciowego" tekstu, użyj filtrów. Na przykład poniżej wyszukujemy w logach błędy dotyczące pamięci:

cat /var/log/syslog | grep "memory"

3. Wyszukiwanie wśród procesów

Wyświetlanie wszystkich aktywnych procesów związanych z nginx:

ps aux | grep "nginx"

6. Zaawansowane funkcje: wyrażenia regularne

Jeśli prostego wyszukiwania nie wystarcza, grep obsługuje potężne narzędzie — wyrażenia regularne. Postaraj się nie panikować, to nie jest takie trudne, jak może się wydawać.

Przykład wyrażenia regularnego

Szukamy linii, które zaczynają się od "error":

grep "^error" logfile.txt

Wyjaśnienie:

  • Symbol ^ oznacza "początek linii".

Szukamy linii, które kończą się na ".conf":

grep "\.conf$" filelist.txt

Wyjaśnienie:

  • Symbol $ wskazuje na koniec linii.
  • Odwrócony ukośnik \ ucieka symbol ., żeby był rozpoznawany jako kropka, a nie dowolny znak.
Ważne!

Wyrażenia regularne to bardzo potężne narzędzie. Czasem nawet zbyt potężne. Stary żart: jeśli masz problem i chcesz go rozwiązać przy pomocy wyrażeń regularnych, to masz już dwa problemy.


7. Zadanie praktyczne

Aby utrwalić wiedzę, wykonaj następujące zadania:

  1. W pliku access.log znajdź linie zawierające kod odpowiedzi serwera "404":

    grep "404" access.log
    
  2. W katalogu /var/log znajdź wszystkie linie zawierające słowo "error", ignorując wielkość liter:

    grep -ri "error" /var/log
    
  3. Wyświetl wszystkie linie z pliku database.log, które nie zawierają słowa "DEBUG":

    grep -v "DEBUG" database.log
    
  4. Znajdź w logach systemowych linie zawierające datę "Oct 15":

    grep "Oct 15" /var/log/syslog
    
  5. Wyświetl linie z pliku application.log z dopasowaniem "timeout", ale wskaż numery linii:

    grep -n "timeout" application.log
    

8. Częste błędy i szczegóły

  1. Jeśli nic się nie wyświetla, to niekoniecznie błąd. Możliwe, że po prostu nie ma dopasowań. Spróbuj sprawdzić plik poleceniem, na przykład cat, aby upewnić się, że w nim jest tekst.

  2. Zwróć uwagę na cudzysłowy. Jeśli wzorzec zawiera spacje lub znaki specjalne, koniecznie ujęcie go w cudzysłowy.

  3. Kiedy pracujesz z dużymi katalogami i używasz flagi -r, bądź gotowy na dużą ilość wyjścia. Użyj | less dla wygodniejszego przeglądania. Na przykład:

    grep -r "test" /some/directory | less
    

Teraz, kiedy w pełni opanowałeś użycie grep, jesteś gotowy do wyszukiwania czegokolwiek gdziekolwiek. Od wyszukiwania błędów w ogromnej bazie kodu po przeglądanie logów systemowych — twoje umiejętności wyszukiwania staną się Twoim ulubionym narzędziem.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION