Jak wyszukać tekstu w wielu plikach (katalogach) w systemach Linux/Unix

W systemach operacyjnych Linux/Unix do wyszukiwania tekstu w wielu plikach jednocześnie służy komenda grep. Jej składnia jest następująca:

grep <parametry> <szukany ciąg> <gdzie szukamy>

Przejdźmy zatem do przykładu. Chcemy poszukać wszystkie pliki w bieżącym katalogu w których występuje słówko test. Polecenie wygląda zatem następująco:

grep "test" *

W przypadku, kiedy szukany ciąg jest złożony tylko z jednego wyrazu nie musimy stosować cudzysłowia.

Jeżeli program grep znajdzie podane słówko test w plikach wyświetli nazwę pliku oraz zawartość linijki w której ten tekst wystąpił, np:

plik1.txt:to jest test
plik2.txt:plik testowy

Spójrzmy na inny przykład. Szukamy teraz w plikach z rozszerzeniem log błędów (error).

grep "error" *.log

Jeżeli polecenie znajdzie jakieś błędy wyświetli tak jak w przykładzie poniżej:

20210224.log:20210224 20:02:12 error błędna nazwa użytkownika lub hasło
20210224.log:20210224 20:02:11 error błędna nazwa użytkownika lub hasło
20210224.log:20210224 20:02:10 error błędna nazwa użytkownika lub hasło
20210220.log:20210220 18:01:13 error błędny token

Dotychczas przeszukiwaliśmy tylko pliki w bieżącym katalogu. Jak zatem możemy poszukać danego tekstu w plikach znajdujących się w katalogu bieżącym i jego podkatalogach? Wystarczy zastosować parametr: -r. Spójrzmy na przykład:

grep -r "fatal error" *.log

Powyższe polecenie z parametrem -r wyszuka frazy fatal error w plikach o rozszerzeniu log w katalogu bieżącym oraz podkatalogach. W rezultacie możemy otrzymać przykładowy wynik:

20210210.log:20210210 08:01:13 fatal error błąd bazy danych
katalog1/20210224.log:20210224 20:02:12 fatal error brak miejsca na dysku
katalog1/20210224.log:20210224 20:02:11 fatal error brak miejsca na dysku
katalog2/20210224.log:20210224 20:02:10 fatal error brak miejsca na dysku
log/20210220.log:20210220 18:01:13 fatal error błąd bazy danych