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