Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кетков.doc
Скачиваний:
17
Добавлен:
27.09.2019
Размер:
2.22 Mб
Скачать

13.3. Утилита grep.Com поиска в текстовых файлах

В состав систем программирования BC 3.1 и BCB входит очень мощная поисковая утилита grep.com. Ее имя образовано от аббревиатуры, которая в ранних руководствах представлялась как Global Regular Expression Print –Печать Глобальных Регулярных Выражений. В новых руководствах предложена более прогрессивная комбинация слов – Generalized Regular Expression Parser – Обобщенный Грамматический Разбор Регулярных Выражений. Так или иначе, в обеих аббревиатурах присутствует термин регулярные выражения. С простейшими представителями регулярных выражений встречался практически каждый программист, который искал или копировал файлы с именами типа *.txt или ?set.txt. В этих именах символ * обозначал цепочку любых символов (в том числе и цепочку нулевой длины), а знак ? заменял любой одиночный символ.

Утилита запускается из командной строки со следующим набором параметров:

>grep [ключи поиска] поисковый_образ область_поиска

Ключи поиска представляют собой одиночные буквы или цепочки букв, которым предшествует символ '–'. Например, –A -D . Вслед за буквой может находиться знак минус (опция отключена) или знак плюс (опция включена). По умолчанию –R эквивалентно –R+. В ключах большие и малые буквы эквивалентны. Смежные ключи могут объединяться в группы: -C -D -I эквивалентно -CDI или -CI -D. В некоторых случаях порядок ключей может оказаться важным, т.к. действия одного могут поглощать действия другого. Список ключей и расшифровка устанавливаемых ими режимов поиска приведены в табл. 13.3.

Таблица 13.3

Ключ

Назначение

-C-

Выводить только количество совпадений в каждом файле без указания номеров строк. Без этой опции номера строк выдаются.

-D+

Производить поиск с заходом в подкаталоги. Без указания пути и без ключа -D поиск производится только в текущем каталоге.

-I+

Игнорировать разницу между большими и малыми буквами (по умолчанию большие и малые буквы различаются).

-L-

Выводить только имена файлов, где обнаружен поисковый образ

-N-

Выводить номера строк в файлах, где обнаружен поисковый образ

-O-

Выводить сообщения в формате Unix

-R+

Искать регулярные выражения

-U-

Изменить стандартные опции поиска, действующие в GREP по умолчанию, и сохранить новые опции в grep.com

-V-

Инверсный поиск – выдаются только те строки, в которых поисковый образ не содержится.

-W-

Поиск слова. По умолчанию слово состоит из букв, цифр и символа подчерк Все остальные символы рассматриваются как разделители слов.

-Z-

Более подробный вывод – имя файла, число совпадений (даже если оно равно 0)

Поисковый образ S1S2...Sk может быть представлен просто словом, текстом, заключенным в кавычки (если в поисковом образе есть пробелы или табуляторные пропуски), или регулярным выражением. Если используется ключ -R, то поисковый образ представляет регулярное выражение, в котором присутствуют специальные символы, имеющие следующий смысл:

"^S1S2...Sk" символ "крышка" (caret) перед поисковым образом означает, что результат поиска должен находиться в начале строки;

"S1S2...Sk$" символ доллара после поискового образа означает, что результат поиска должен находиться в конце строки;

. точка заменяет любой символ;

\ слэш предшествует символу, который ищется (например, \. означает поиск точки);

* предшествующий символ может встретиться 0 или большее число раз (например,

qw* означает поиск q, qw, qww, qwww, ...);

+ предшествующий символ может встретиться 1 или большее число раз (например,

qw+ означает поиск qw, qww, qwww, ...);

1α2... αk] должен встретиться хотя бы один из символов, указанных в скобках;

[^α1α2... αk] не должен встретиться ни один из символов, указанных в скобках;

В поисковом множестве можно задавать диапазоны подряд идущих символов:

[0-9] все цифры;

[a-jx -z] малые буквы от a до j, x ,y, z

Очень полезная возможность открывается ключом -u. Вы можете скопировать утилиту grep.com в свой каталог и произвести там нужную настройку режимов поиска с последующим запоминанием удобной для вас комбинации ключей в теле модуля grep. После этого можно уже не набирать эту последовательность ключей при повторных поисках.

Поиск осуществляется среди тех файлов и каталогов, которые указаны в конце командной строки. Например:

>grep -W fun1 *.c *.cpp

В этом случае производится поиск слова fun1 в текущем каталоге среди всех файлов с расширениями .c и .cpp.

>grep -D "my book" \*.doc

В этом случае область поиска – файлы с расширением .doc в корневом каталоге и всех его подкаталогах. Так как поисковый образ содержит пробелы, то он заключен в кавычки.

Для поиска тех или иных идентификаторов в большом количестве программ удобно создать bat-файл, например, с именем grep.bat:

grep.com -i -d -w -n %1 *.c *.cpp > 1.txt

Такой файл запускается по команде:

grep.bat word

Здесь word – искомый идентификатор, он заменит в bat-файле параметр %1. Удобство заключается еще и в том, что результат поиска записывается в файл 1.txt, который можно в дальнейшем детально изучать. Смотреть результаты большого поиска на экране бывает не всегда удобно (да и объем выдаваемой информации может превысить емкость экрана).

Раздел 14. Функции. Новые возможности в C++