Comment on page
Grep
Niejednokrotnie zdarza się, że przeglądając różne pliki, czy wykonując rozmaite polecenia, na ekranie konsoli pojawia się wynik w postaci długiego bloku tekstu. Często interesują nas konkretne informacje zawarte w tym tekście. Dla przykładu, powiedzmy że przeglądamy logi systemu. Chcemy zobaczyć, kiedy logował się użytkownik blackbat. Najłatwiej byłoby więc przeszukać plik w poszukiwaniu wspomnianego użytkownika. Takie przeszukiwanie umożliwia nam polecenie grep (ang. Globally search for Regular Expression and Print out).
Jak większość poleceń, także grep posiada wiele przydatnych opcji. Poniżej omówimy kilka z nich.
W celu łatwiejszego przeglądania i analizowania wyjścia, jakie wyprodukuje
grep
, możemy włączyć wyświetlanie numer ów linii za pomocą opcji -n.grep -n
grep --line-number
Nie zawsze interesują nas linie zawierające dany fragment, czasem chcemy po prostu wiedzieć, ile ich jest. W tym celu przydatna będzie opcja -c.
grep -c
grep --count
Czasem potrzebujemy znaleźć linie, w których zadany fragment nie występuje. W tym celu możemy skorzystać z opcji, która odwraca wyszukiwanie: -v.
grep -v
grep --invert-match
Jak to mówią, rozmiar nie ma znaczenia. Możemy tę myśl przekazać także do polecenia
grep
za pomocą opcji -i.grep -i
grep --ignore-case
Jeżeli chcemy dopasować jedynie pełne wyrazy, a nie ich fragmenty, możemy skorzystać z opcji -w.
grep -w
grep --word-regexp
Aby wyświetlić jedynie dopasowane fragmenty, a nie całe linie, użyjemy opcji -o.
grep -o
grep --only-matching
Czasem potrzebujemy zobaczyć nie tylko linię z dopasowanym tekstem, ale także klika wcześniejszych. Możemy to zrobić za pomocą opcji -B.
grep -B <liczba>
grep --before-context <liczba>
Czasem potrzebujemy zobaczyć nie tylko linię z dopasowanym tekstem, ale także klika kolejnych. Możemy to zrobić za pomocą opcji -A.
grep -A <liczba>
grep --after-context <liczba>
Wyszukiwanie za pomocą fragmentu tekstu ma swoje ograniczenia. Nie zawsze chcemy wyszukać konkretny tekst, czasem chcemy znaleźć wystąpienia zadanego formatu. Załóżmy, że przeglądając logi systemowe chcemy znaleźć wszystkie linie zawierające znacznik czasowy w formacie hh:mm:ss. Nie interesuje nas konkretny czas, ale sam fakt występowania jakiegoś czasu w danej linii. Takie dopasowanie możemy uzyskać za pomocą wyrażeń regularnych.
Przedstawimy teraz kilka przydatnych wzorców dopasowań.
Jeżeli szukamy linii, które zaczynają się od zadanego wzorca, możemy skorzystać z symbolu ^.
^start
Jeżeli szukamy linii, które kończą się zadanym wzorcem, możemy skorzystać z symbolu $.
start$
W celu dopasowania dowolnego znaku w zadanym miejscu wzorca, użyjemy znaku kropki.
Za pomocą symbolu gwiazdki możemy określić, że występujący przed nią fragment wzorca powinien wystąpić zero lub więcej razy. Fragmenty wzorca możemy otaczać nawiasami okrągłymi, żeby uwzględnić większy fragment niż tylko pojedynczy znak.
Używając notacji nawiasów kwadratowych możemy określić, jakie znaki mogą zostać dopasowane w zadanym miejscu. Dla przykładu, jeżeli chcielibyśmy dopasować jedynie litery a lub b to użylibyśmy wyrażenia [ab].
Możemy także wykluczyć zadane znaki z dopasowania w konkretnym miejscu wzorca używając nawiasów kwadratowych i znaku ^. Dla przykładu, jeżeli chcielibyśmy dopasować wszystkie znaki poza a i b zapisalibyśmy [^ab].
Używając nawiasów kwadratowych możemy także określić przedział dopuszczalnych znaków. Dla przykładu, jeżeli chcielibyśmy dopasować tylko cyfry, napisalibyśmy [0-9].
Last modified 8mo ago