Narzędzie służące do wyszukiwania. Składnia jest następująca:
grep [-opcje] wzorzec [plik lub ścieżka]
Najczęściej używane opcje:
- -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 '-tak'
- -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
grep -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 słowa1 lub słowa2, możemy skorzystać z:
grep 'slowo1\|slowo2'
lub w jeszcze innej postaci:
grep 'Zamówienie numer \(125\|148\)'
które zwróci nam występowanie fraz:
Zamówienie numer 125 lub Zamówienie numer 148
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łowiu, 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ń:
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 ' 500 '
powyższa linijka, pokaże nam „na żywo”, wszystkie wpisy, wpadające z kodem 500.