Skrypty powłoki Bash #24 - Pogrepujmy
Wstęp
Dzień dobry, dziś opowiem co nieco o komendzie grep i sposobach jej uzycia. Serdecznie zapraszam.
Co to jest grep
grep – program , który służy do wyszukiwania w tekście i wyodrębniania linii zawierających ciąg znaków pasujący do podanego wyrażenia regularnego. Dla chętnych polecam filmik o historii grep’a https://youtu.be/NTfOnGZUZDk
Tryby grepa (std, extended, perl)
Grep posiada trzy główne tryby pracy. Są to: * Standardowy - Rozpoznaje wzór jako zwykłe wyrażenie regularne * Extended (rozszerzony) - Rozpoznaje wzór jako rozszerzone wyrażenie regularne * Perl mode - Rozpoznaje wzór jako wyrażenie regularne według Perl’a
Prosty grep na pliku
Załóżmy, że mamy plik plik.txt
o zawartości:
ABBA
BABA
ACAB
BACA
DACA
MACA
PACA
i chcemy z niego wyciągnąć słowo ABBA
w takim przypadku komenda będzie wyglądać następująco:
grep ABBA plik.txt
###
>ABBA
Prosty grep na potoku
Załóżmy, że mamy plik plik.txt
z poprzedniego punktu. Jednak tym razem użyjemy programu cat
by uzyskać całą zawartość i przekażemy to do programu grep
. Naszym celem będzie wyciągnięcie słowa MACA
. W tym celu wykorzystamy konstrukcję taką:
cat plik.txt | grep MACA
Grep po drzewie
Jeżeli szukamy danej frazy, ale nie wiemy dokładnie w którym pliku to może być, albo musimy przeszukać drzewo plików, to możemy wykorzystać opcje -R
.
Wtedy grep zacznie przeszukiwać nasze drzewo np. :
grep -R "client_id:1234" ./
Grep do wycinania
Jeśli nasz log posiada dużo niepotrzebnego syfu. Na przykład jakiś użyszkodnik uruchomił debug a nas nie obchodzi cała ta sieczka informacji. Możemy ja usunąć, odwracając zachowanie grep’a przy pomocy przełącznika -v
. W tym przypadku nasza komenda będzie wyglądać następująco:
grep -v "{debug}” plik.log
Grep wcześniej
Pokazuje nam 3 linie nad szukaną frazą
grep -B 3 fraza plik.log
Grep później
Pokazuje nam 3 linie następujące po szukanej frazie
grep -A 3 fraza plik.log
Grep dookoła (komplementarny )
Pokazuje nam 3 poprzedzające i 3 następujące linie
grep -C 3 fraza plik.log
Cyfra 3 jest przykładowa i można ja zastąpić dowolna cyfrą lub liczbą
Grep wzór prosty (początek/koniec lini i * )
Linia zaczyna się od słowa wzor
grep „^wzor” plik.log
Linia kończy się słowem wzor
grep „wzor$” plik.log
Pomiędzy literą w
a literami or
może pojawić się dowolny znak
grep „w*or” plik.log
Grep wzór złożony (digit pattern, times)
Wyszukiwanie numerów telefonu (9 cyfr bez przerwy)
grep "[:digit:]{9}" plik.log
lub grep [0-9]{9} plik.log
Numer telefonu rozdzielony -
grep "[0-9]{3}-[0-9]{3}-[0-9]{3}" plik.log
Kod EAN-8
grep [0-9]{8} plik.log
Kod EAN-13
grep [0-9]{13} plik.log
Epilog
Na dziś to tyle, mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “O Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.