poradniki
Polecenie grep wyszukiwanie wyrażeń w tekście Linux
Co robi polecenie grep
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
Wyszzukanie listy elementów za pomocą grep:
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ń grep:
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.