Linux – komenda grep

0
378

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 '[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.

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here