poradniki

Polecenie grep wyszukiwanie wyrażeń w tekście Linux

wpis_header_img
Narzędzie służące do wyszukiwania grep. Składnia polecenia jest następująca:
grep [-opcje] wzorzec [plik lub ścieżka]

Polecenie grep

Najczęściej używane opcje grep:

-i ignoruje wielkość liter
-r wyszukuje również w sub katalogach ścieżki
-l pokazuje nazwy plików, w których znajduje się pasujący wzorzec
-n pokazuje linię, w której występuje szukany wzorzec
-v pokazuje linie, które nie zawierają wzorca
-F traktuje szukany wzorzec, jako escapowany string
-E traktuje szukany wzorzec, jako rozszerzone wyrażenie regularne
-e informuje, że następny argument, jest wzorcem

grep -e '-wzorzec'

 

-c zwróci nam liczbę pasujących fraz
-x zwróci wynik, tylko i wyłącznie, jeżeli pasuje cała linia
-m[cyfra] przerwie wyszukiwanie, po znalezieniu pierwszych [cyfra] rezultatów

rep -m50 'error 35'

 

Znaki specjalne:

W celu skutecznego znalezienia fraz, które nas interesują, niektóre znaki powinny być escapeowane, są to m.in.

; ' " ` # $ & * ? [ ] < >  { } \ | ( )

 

Escapeowania dokonujemy za pomocą backslasha \, przykładowo:

grep '125\*\*\*\*125' plik

 

pozwoli nam, na wyszukanie 125****125 w pliku. Co ciekawe, jesteśmy również w stanie, znaleźć to bez escapeowania, za pomocą opcji -F, tj.

grep -F '125****125' plik

 

Szukanie listy elementów:

Istnieje możliwość wyszukiwania listy znaków, za pomocą [][1-9] da nam taki sam rezultat, jak [123456789][a-d] da nam taki sam rezultat, jak [abcd]

Jeżeli chcemy wyszukać występowanie jakichś słów, możemy skorzystać z:

grep 'slowo_pierwsze\|slowo_drugie'

 

lub w jeszcze innej postaci:

grep 'Zamówienie numer \(1\|3\)'

 

które zwróci nam występowanie fraz:
Zamówienie numer 1 lub Zamówienie numer 3

Apostrof, czy cudzysłów?

Dobrą praktyką, jest używanie apostrofów, zamiast cudzysłowu. Szukana fraza, w apostrofie traktowana jest jako string, natomiast w cudzysłowie, jest interpretowana.
Najprościej, można to zobaczyć na przykładzie:

echo "$(date)"

 

zwróci nam datę, natomiast:

echo '$(date)'

 

zostanie potraktowane jako string.

Wyrażenia regularne oraz łączenie poleceń:

Polecenie grep obsługuje również wyrażenia regularne, przykładowo, chcemy znaleźć adresy IP, występujące w pliku:

grep -E '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' plik

 

można również łączyć grepa z innymi komendami, za pomocą potoku:

tail -f acces.log | grep ' 200 '

 

powyższa linijka, pokaże nam „na żywo”, wszystkie wpisy, wpadające z kodem 200.