Narzędzia linuksowe mają to do siebie, że można je wykorzystać na wiele różnych sposobów. Najczęściej jednak sposoby te są głęboko ukryte za wyjaśnieniami poszczególnych przełączników i ich potencjalnych wartości. W dzisiejszym wpisie chciałbym pokazać jedną ciekawą sztuczkę dotyczącą szeroko używanego narzędzia do wyszukiwania informacji w plikach – grep.
Grep: global / regular expression / print.
Program grep jest jednym z najbardziej przydatnych narzędzi dostępnych w ramach systemów zgodnych ze standardem POSIX. Podczas operacji w „czarnym ekranie” nierzadko musimy zlokalizować pewną wartość w pliku, np. wartość pewnej zmiennej w pliku konfiguracyjnym. Przykładem może być opisywana przeze mnie właściwość short_open_tag w pliku php.ini:
grep 'short_open_tag' php.ini
Wynik [2 linijki pasują do wyrażenia]:
short_open_tag short_open_tag = Off
Jest to moim zdaniem najprostszy sposób na wykonanie tego typu zadań. Przy okazji – posiada on poza tym wiele innych możliwości – polecam zagłębienie się w lekturę manuala tego programu.
Grep: wyświetlanie linii otaczających znalezione wyniki.
Gdy wywołamy program grep bez dodatkowych modyfikatorów, wyświetli on wszystkie linie, które udało mu się dopasować do podanego wzorca. Czasem jednak potrzebujemy informacji znajdujących się w pewnym otoczeniu znalezionego wyniku, np. opisu danej zmiennej z pliku konfiguracyjnego. Twórcy narzędzia podeszli do sprawy w pełni profesjonalnie, zapewniając nam wszystkie trzy możliwości wyświetlania tych danych:
- linie znajdujące się przed wynikiem, modyfikator -B
- linie znajdujące się po wyniku, modyfikator -A
- linie znajdujące się po obu stronach wyniku, modyfikator -C
Sprawdźmy więc, jak działają w praktyce [w wynikach, linijka "--" oznacza kolejny znaleziony fragment, w tym przypadku zostały znalezione dwa]:
Wyświetlanie 5 linii znajdujących się przed znalezionym wynikiem:
grep -B 5 'short_open_tag' php.ini
; session.hash_bits_per_character ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 ; short_open_tag -- ; supported for backwards compatibility, but we recommend you don't use them. ; Default Value: On ; Development Value: Off ; Production Value: Off ; http://php.net/short-open-tag short_open_tag = Off
Wyświetlanie 5 linii znajdujących się przed znalezionym wynikiem:
grep -A 5 'short_open_tag' php.ini
; short_open_tag ; Default Value: On ; Development Value: Off ; Production Value: Off ; track_errors -- short_open_tag = Off ; Allow ASP-style <% %> tags. ; http://php.net/asp-tags asp_tags = Off
Wyświetlanie 5 linii znajdujących się przed znalezionym wynikiem:
grep -C 5 'short_open_tag' php.ini
; session.hash_bits_per_character ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 ; short_open_tag ; Default Value: On ; Development Value: Off ; Production Value: Off ; track_errors -- ; supported for backwards compatibility, but we recommend you don't use them. ; Default Value: On ; Development Value: Off ; Production Value: Off ; http://php.net/short-open-tag short_open_tag = Off ; Allow ASP-style <% %> tags. ; http://php.net/asp-tags asp_tags = Off
Jak widać, jest to relatywnie prosty i jednocześnie bardzo efektywny sposób na wyszukiwanie informacji w plikach. Polecam każdemu, kto ma styczność z systemami opartymi na idei Linuksa / Uniksa, ponieważ jest on tam na pewno obecny. Mam nadzieję, że dzisiejszy wpis zapadnie Wam w pamięć, ze względu na to, że czasem prawdopodobnie będziecie próbowali [podobnie jak ja za pierwszym razem ;]] wynajdywać koło na nowo, zamiast spróbować gotowego rozwiązania.
Do zobaczenia w kolejnym wpisie!
Warto przeczytać.
Trwa ładowanie…
Pingback: Linux: Lista plików zawartych w archiwach programu tar. « Tomasz Kowalczyk