This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

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:
1
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: 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:

1
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:

1
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:

1
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!