Linux – komenda grep

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.

Facebook
LinkedIn