Poczciwy GREP

Każdy z użytkowników komputerów, poza różnego typu programami, przechowuje na dysku pliki tekstowe: wykazy, tabele, sprawozdania, artykuły, wersje źródłowe programów itp. Gdy plików tych jest za dużo, zaczynamy się gubić i często odpowiedni tekst jesteśmy w stanie znaleźć dopiero po charakterystycznej frazie, którą przypadkiem pamiętamy. Znane są co najmniej dwa programy narzędziowe pomagające w takich wypadkach. Pierwszy to Nortonowski Text Search, a drugi - wywodzący swoją historię jeszcze z Unixu, GREP.

Każdy z użytkowników komputerów, poza różnego typu programami, przechowuje na dysku pliki tekstowe: wykazy, tabele, sprawozdania, artykuły, wersje źródłowe programów itp. Gdy plików tych jest za dużo, zaczynamy się gubić i często odpowiedni tekst jesteśmy w stanie znaleźć dopiero po charakterystycznej frazie, którą przypadkiem pamiętamy. Znane są co najmniej dwa programy narzędziowe pomagające w takich wypadkach. Pierwszy to Nortonowski Text Search, a drugi - wywodzący swoją historię jeszcze z Unixu, GREP.

GREP (Get Regular Expression Processing), czyli procesor tzw. napisów regularnych, tzn. takich, w których dopuszcza się na niektórych miejscach pewną dowolność, jest dodawany jako narzędzie np. przy większości kompilatorów produkcji Borlanda. Ponieważ zajmuje tylko 7 kB, nikomu nie przeszkadza. Warto też przenieść go do jakiegokolwiek ogólnodostępnego katalogu, np. systemowego. Nie jest jasne, dlaczego GREP-u nie zaanektował jeszcze w swoje władanie DOS 5.0.

Wywołanie poszukiwania programem GREP dokonujemy w linii poleceń pisząc:

GREP opcje napis_regularny nazwy_plików

Przykład 1.

GREP kotek piesek

w pliku PIESEK bieżącego katologu szukamy napisu "kotek". Napis "Kotek" nie zostanie wykryty.

Nazwy plików w których poszukujemy napisów tolerują składnię znaków globalnych (*,?) znaną z DOS-u.

Opcje

Mimo obfitośći funkcji (CDILNORUVWZ) najbardziej użyteczna w życiu jest kombinacja:

-id

co oznacza, że poszukiwanie wymienionego napisu regularnego będzie przebiegało (D) w danym katalogu i wszystkich jego podkatalogach, ignorując (I) różnicę między małymi i dużymi literami. Pozostałych opcji nie omawiamy, gdyż są mało atrakcyjne. Szperaczy odsyłamy do literatury, leniwych uspokajamy, że niewiele stracili.

Napis regularny

to ciąg liter, ewentualnie przeplatany następującymi "operatorami regularnymi" (nazwa może trochę przemądrzała)

^$.*+[]

których znaczenie, analogiczne do działania znaków globalnych w DOS-ie, najłatwiej wyjaśnić w kolejnych przykładach:

Przykład 2 (^).

grep ^kotek *.*

we wszystkich plikach bieżącego katalogu poszukiwana jest linia zaczynająca się słowem "kotek".

Przykład 3 ($).

grep $kotek *.*

we wszystkich plikach bieżącego katalogu poszukiwana jest linia kończąca się słowem "kotek".

Przykład 4 (.).

grep -i ko.ek *.*

we wszystkich plikach bieżącego katalogu poszukiwane są linie zawierające złożone z dużych lub małych liter napisy "ko" i "ek", przedzielone dowolnym znakiem, np. spacją.

Przykład 5 (*)

grep 10* *.*

we wszystkich plikach bieżącego katalogu poszukiwany jest napis 1 albo 10, 100, 1000 itd.

Przykład 6 (+).

grep 10* *.*

we wszystkich plikach bieżącego katalogu poszukiwany jest napis 10, 100 lub 1000 itd.

Przykład 7 ([]).

grep [a-l]otek long.txt

w pliku LONG.TXT poszukiwane są linie z napisami, zawierającymi napis "otek", poprzedzony jedną z liter spośród a, b, c ...l. Analogiczny przykład:

grep [^a-l,KLT]otek long.txt

wyklucza wymienione litery przed napisem "otek", a dopuszca litery K lub L lub T.

Przykład 8 (\).

grep kotek\. piesek

polecenie pomoże w pliku PIESEK znaleźć napis "kotek.". Znak "\" pozwala bowiem na interpretację operatora regularnego (w naszym wypadku kropki) jako zwykłego znaku".".

GREP, dzięki użyciu konwencji napisów regularnych jest bardzo silnym narzędziem. W szczególności pozwala na wykonanie poszukiwań, które w Text Search są nie do pomyślenia. Na przykład

grep -id Ala.*kota *.*

znajdzie w danym katalogu i jego podkatalogach wszystkie pliki, w których po słowie "alA" napisanym dowolnymi literami, w tej samej linii występuje dowolnie napisane słowo "kOtA". Na taką operację nie pozwala większość znanych i uznanych edytorów tekstów na PC. Wydaje się, że od czasów starych maszyn PDP wyrosło całkiem nowe pokolenie programistów, które zapomniało do końca zdyskontować dorobek przeszłości.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200