Przydatne parametry

  • -v - wyświetla tylko te wiersze, które nie pasują do wyrażenia regularnego.

  • -l - wyświetla nazwy plików, które zawierają podane wyrażenie

  • -L - wypisuje nazwy plików, które nie zawierają podanego wyrażenia

  • -c - wypisuje jedynie liczbę wierszy spełniających warunek zgodności z podanym wyrażeniem

  • -n - wypisuje numer linii pliku gdzie występuje wzorzec

  • -b - wypisuje wynik przesunięcia w bajtach danego wiersza, pasujący do wyrażenie regularnego

  • -i - nie uwzględnia wielkości liter

  • -w - będą brane pod uwagę jedynie całe słowa

  • -x - bedą brane pod uwagę całe wiersze nie działa z -w

Przykłady użycia

Wyszukanie wszystkich pakietów zawierających słowa vim i common

dnf search vim | grep -wE "vim|common"

Wyszukanie wszystkich pakietów zawierających słowa vim i common, ale pokaże również pakiety, którchy częścią nazwy jest słowo vim lub common np. neovim.

dnf search vim | grep -E "vim|common"

Wyszukiwanie słowa we wszystkich plikach i podkatalogach bieżącej lokalizacji

grep -r [wyraz] *

Wyszukiwanie ignorując wielkość znaków

grep -i [wyraz] *

Paramter -x

Bedą brane pod uwagę całe wiersze nie działa z -w

grep [[:upper:]] -x plik.txt

Parametr -A, -B i -C

  • -A liczba - wyświetla linię, w której występuje wzorzec a także linie niżej

  • -B liczba - wyświetla linię, w której występuje wyrażenie a także linie powyżej

grep [[:alpha:]] -B 2 plik.txt
  • -C liczba - wyświetla szukaną linię oraz linie przed i po wyszukiwanej

Wyszukiwanie rekursywne

  • -r - wyszukiwanie rekursywne

grep [[:alpha:]] -r katalog

Wyszukanie plików nie zawierających podanego ciągu znaków

Polecenie wyszukuje plików nie zawierających ciągu znaków All. Polecenie rozpoznaje wielkość znaków.

grep -rL All .

./wiki/welcome.txt
./playground/playground.txt

Wyświetlenie wyrażenia pomiędzy dwoma patternami

Polecenie wyświetla zawartość pomiędzy -auth a -background znajdujące się w jednej linii

grep -o -P '(?<=-auth).*(?=-background)'

Usunięcie komentarzy z pliku

Polecenie usuwa wszystkie linie zaczynające się od znaku # lub ;.

more /etc/pf.conf | egrep -v '(#|;)' | grep '[a-z]'

Wyszukanie dwóch różnych wartości

Parametr -e wyszukuje wszystkich linii w których występuje choć jeden z szukanych wyrażeń, jeśli chcemy znaleźć linie w których występują wszystkie parametry trzeba użyć kilku poleceń grep po kolei np. grep pierwszy | grep drugi

pkg_info | grep -e "nmap" -e "ncftp'

ncftp-3.2.2         ftp replacement with advanced user interface
nmap-4.76           scan ports and fingerprint stack of network hosts

Wyświetlenie 2 linii po znalezionym ciągu znaków

Polecenie wyświetli w sumie 3 linie.

cat /var/log/messages | grep -A 2 -e "pid=767"
grep -A 1 "nmbd" nazwa_pliku

Wyświetlenie 2 linii przed znalezionym ciągem znaków

Polecenie wyświetli w sumie 3 linie.

cat /var/log/messages | grep -B 2 -e "pid=767"
grep -B 2 "pid=767" /var/log/messages

Szukamy słowa sshd w plikach znajdujących się w katalogu /etc

grep sshd /etc/*

/etc/rc:if [ X"${sshd_flags}" != X"NO" ]; then
/etc/rc:        echo -n ' sshd';                /usr/sbin/sshd ${sshd_flags};
/etc/rc.conf:sshd_flags=""              # for normal use: ""

Wyszukanie dokładnego ciągu znaków oddzielonego znakami spacji

Jeśli chcemy wyszukać np. słowo internet ale już nie internet6 możemy zastosować parametr -w.

fstat | grep -w internet

red      sshd        5510    5* internet stream tcp 0xd4392e10 192.168.6.66:65535 <-- 192.168.6.77:4853
root     sshd       10758    5* internet stream tcp 0xd4392e10 192.168.6.66:65535 <-- 192.168.6.77:4853
www      httpd       8536   16* internet stream tcp 0xd4392640 *:443
www      httpd       8536   17* internet stream tcp 0xd43927d0 *:80
www      httpd       1085   16* internet stream tcp 0xd4392640 *:443
www      httpd       1085   17* internet stream tcp 0xd43927d0 *:80
www      httpd      25969   16* internet stream tcp 0xd4392640 *:443
www      httpd      25969   17* internet stream tcp 0xd43927d0 *:80

Ten sam efekt uzyskamy za pomocą polecenia

fstat | grep "[[:space:]]internet[[:space:]]"

Również ten sam efekt da nam polecenie fstat i awk.

fstat | awk '$5 ~ /^internet$/'

Wyszukanie ciągu znaków w pliku

grep :1000: /etc/passwd

red:*:1000:10:red:/home/red:/bin/ksh

Inne przykłady

Wyszukanie wzorca w pliku

grep pattern file

Case insensitive search (with line numbers)

grep -in pattern file

Recursively grep for string <pattern> in folder:

grep -R pattern folder

Wyszukiwanie linii z wzorcami znajdującymi się w pliku (linia po linii)

grep -f pattern_file file

Wyszukiwanie linii nie zawierających wzorca

grep -v pattern file

Wyszukiwanie za pomocą wyrażenia regularnego

grep "^00" file  #Match lines starting with 00
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" file  #Find IP add

Find all files which match {pattern} in {directory}

This will show: "file:line my research"

grep -rnw 'directory' -e "pattern"

Exclude grep from your grepped output of ps.

Add [] to the first letter. Ex: sshd → [s]shd

ps aux | grep '[h]ttpd'

Colour in red {bash} and keep all other lines

ps aux | grep -E --color 'bash|$'

Wyszukanie słowo w pliku plik.txt

Polecenie grep zawsze wyszukuje z rozróżnianiem wielkości liter

grep słowo plik.txt

Parametr -i wyłącza rozróżnianie wielkości liter

grep -i "słowo" plik.txt

Parametr -v wyświetla linie które nie zawierają słowa "słowo"

grep -v "słowo" plik.txt

Połączenie parametrów -v i -i wyświetli linie które nie zawierają szukanego słowa niezależnie od wielkości liter

grep -v -i "słowo" plik.txt

Wyszukanie dwóch słów jednocześnie z wykorzystaniem parametru -e

grep -i -e "słowo1" -e "słowo2" plik.txt

Użycie w tym przypadku parametru -i ma zastosowoanie do obu szukanych wyrazów

Zliczanie linii wystąpienia danego wyrazu

grep -i -c "wyraz" plik.txt

Należy zwrócić uwagę, że zostanie wyświetlona liczba linii w których wystąpi słowo nie liczba wystąpień słowa czyli linia, w której będzie szukane słowo więcej niż raz bedzie i tak zliczona jako jedno wystąpienie.

Wyszukiwanie dwóch lub więcej znaków

grep [1a] plik.txt

Wyszukiwanie linii które nie zawierają znaków

grep [^1] plik.txt

Wyszukiwanie linii zaczynających się od wzorca

grep ^początek plik.txt

Wyszukiwanie linii kończących się wzorcem

grep koniec$ plik.txt

Wyszukiwanie linii zawierających alfanumerycznych

grep [[:alnum:]] plik.txt

Wyszukiwanie linii zawierających znaki alfabetu

grep [[:alpha:]] plik.txt

Wyszukiwanie linii zawierających znaki kontrolne

grep [[:cntrl:]] plik.txt

Wyszukiwanie cyfr

grep [[:digit:]] plik.txt

Wyszukiwanie znaku graficznego

grep [[:graph:]] plik.txt

Wyszukiwanie małych znaków

grep [[:lower:]] plik.txt

Wyszukiwanie dowolnego znaku drukowanego

grep [[:print:]] plik.txt

Wyszukiwanie dowolnego znaku interpunkcyjnego

grep [[:punct:]] plik.txt

Wyszukiwanie dowolny znak biały (spacja, tabulator)

grep [[:space:]] plik.txt

Wyszukuje linie w których występują duże litery

grep [[:upper:]] plik.txt

Wyszukuje znaki zawierające liczby heksadecymalne

grep [[:xdigit:]] plik.txt

Podstawowe i rozszerzone wyrażenia regularne

Podstawowy

Rozszerzony

Znaczenie

|

`

`

Suma logiczna lub

\+

+

Jedno powtórzenie lub więcej powtórzeń wyrażenia regularnego

\?

?

Zero powtórzeń lub jedno powtórzenie wyrażenia regularnego

{n}

{n}

Dokładnie n powtórzeń wyrażenia regularnego

\{n,\}

{n}

n lub większa liczba powtórzeń wyrażenia regularnego

\{n,m\}

{n,m}

Maska

Znaczenie

.

any on character

*

match any number of previous (including 0)

+

match any number of previous

$

end of the line

^

begining of the line

\S

any non-whitespace character

\s

any whitespace character

?

optional

[a-z]

any lowercase character

[A-Z]

any upercase character

[A-Za-z]

any letter

[0-9]

any number

\

escape sometihng

Wyszukiwanie adresu URL

grep "https\?://\S*\.[A-Za-z]\+\S*" plik.html

Wyszukiwanie adresu e-mail

grep "\S\+@\S\+\.[A-Za-z]\+" plik.txt

Date: 2020-10-24T13:17:22+02:00