Grep¶
Wstęp¶
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).
Podstawowe opcje¶
Jak większość poleceń, także grep posiada wiele przydatnych opcji. Poniżej omówimy kilka z nich.
Numery linii: -n¶
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.
Składnia¶
Zliczanie pasujących wyników: -c¶
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.
Składnia¶
Odwrócenie dopasowania: -v¶
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.
Składnia¶
Ignorowanie wielkości liter: -i¶
Jak to mówią, rozmiar nie ma znaczenia.
Możemy tę myśl przekazać także do polecenia grep
za pomocą opcji -i.
Składnia¶
Dopasowanie pełnych wyrazów: -w¶
Jeżeli chcemy dopasować jedynie pełne wyrazy, a nie ich fragmenty, możemy skorzystać z opcji -w.
Składnia¶
Wypisywanie tylko dopasowania: -o¶
Aby wyświetlić jedynie dopasowane fragmenty, a nie całe linie, użyjemy opcji -o.
Składnia¶
Wypisanie wcześniejszych linii: -B¶
Czasem potrzebujemy zobaczyć nie tylko linię z dopasowanym tekstem, ale także klika wcześniejszych. Możemy to zrobić za pomocą opcji -B.
Składnia¶
Wypisanie kolejnych linii: -A¶
Czasem potrzebujemy zobaczyć nie tylko linię z dopasowanym tekstem, ale także klika kolejnych. Możemy to zrobić za pomocą opcji -A.
Składnia¶
Wyrażenia regularne¶
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 hhss. 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ń.
Początek linii: ^¶
Jeżeli szukamy linii, które zaczynają się od zadanego wzorca, możemy skorzystać z symbolu ^.
Przykład¶
Koniec linii: $¶
Jeżeli szukamy linii, które kończą się zadanym wzorcem, możemy skorzystać z symbolu $.
Przykład¶
Dopasowanie dowolnego znaku: .¶
W celu dopasowania dowolnego znaku w zadanym miejscu wzorca, użyjemy znaku kropki.
Powtarzanie wzorca zero lub więcej razy: *¶
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.
Dopasowanie do zbioru znaków: []¶
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].
Wykluczenie znaków z dopasowania: [^]¶
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].
Dopasowanie znaków z przedziału¶
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].