Главная » C++, C++ Builder » Что такое Grep в CBuilder?

0

Одна из самых полезных вспомогательных программ в поставке Borland CBuilder — GREP.EXE. Grep — это «Generalized Regular Expression Parser» (основная программа разбора регулярных выражений). Программа grep была стандартной в системе Unix в течение многих лет, а затем была переписана для DOS и Windows. Проще говоря, grep — инструмент поиска, она  умеет просматривать текстовые (и не только текстовые) файлы и искать в них строки, подходящие под заданный образец. Основные альтернативы утилите grep — программа Norton Text Search или команда Find в Windows Explorer. Ни одна из них, однако, не сравнится с grep мощью и гибкостью.

Для использования grep вам нужны две вещи: строка поиска и маска файлов, в которых ее надо искать. Grep умеет искать файлы, содержащие подходящие строки, в каталоге, в каталоге со всеми подкаталогами, по всему диску. Она поразительно быстра и точна, и фактически единственное, за что вы можете не любить эту программу, — ее уродливое название!

В табл. 8.3 приведены основные аргументы команды grep.

Таблица 8.3 Параметры команды grep

-r Использовать разбор регулярных выражений

-c Вместо распечатки имен найденных файлов выдавать их количество

-v Показывать все строки, НЕ подходящие под заданную строку, вместо подходящих

-d Искать в подкаталогах

-l Отображать только имена файлов, содержащих подходящие строки

-n Отображать номера строк, в которых находится подходящий текст

-I Результат поиска не зависит от регистра символов

-z Работа в режиме с подробными сообщениями (verbose mode)

Использование Grep для поиска файлов

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

. (точка) указывает на любой символ в строке, так что H.t будет подходить под следующие строки:

·    Hot

·    Hat

·    Hut

·    Hit

^ («крышечка») будет подходить только под символы, встречающиеся в начале строки. Поэтому, если у вас есть следующие строки текста:

This is a test

Why is This happening?

There is This There is That

и вы будете искать ^This, то будет найдена только первая строка. Звездочка (*) и плюс (+) используются для нескольких символов. Например, A* подходит под ноль или более символов A в строке; поэтому все следующие строки соответству ют этому выражению:

AAA AA A

B

Последняя строка подходит, так как она содержит 0 символов A. Звездочка является  очень мощной командой, которую надо использовать осторожно. При неосторожном использовании она вам выдаст гораздо больше «совпавших» строк, чем вам бы хотелось.

Плюс, с другой стороны, подходит только под один и более символ в строке, так что поиск по этому списку строк на текст A+ возвратит все, кроме последней строки, в которой нет ни одного символа A.

Если вы хотите найти несколько символов, используйте команды [ ]. Например, если  задать образец [aeiou], то вы найдете все строки, содержащие гласные (английские). Если же, наоборот, задать [^aeiou], то вы получите все строки, не содержащие гласных.

Давайте посмотрим на пару примеров использования команды grep для поиска файла или нескольких файлов.

Для начала рассмотрим простой поиск. Все, что я хочу, — это знать, на какой строке в файле

«fred.txt» находится слово «attack». Тогда я бы набрал следующую команду:

grep -n attack fred.txt

Эта команда вернет мне все строки со  словом  «attack» вместе с  номером этой строки в файле

«fred.txt».  Теперь давайте  рассмотрим  поиск  всех  вхождений  слова  «main»  в  исходных файлах

(.cpp) в каталоге проектов CBuilder. Для поиска этой группы файлов я бы использовал команду

grep -d main *.cpp

Эта команда выведет все строки, содержащие «main» в файлах  с расширением .cpp в данном каталоге или любом его подкаталоге (вспомните, что ключ  -d  заставляет  делать  рекурсивный поиск по подкаталогам). И наконец, давайте найдем все функции, возвращающие целое значение, в текущем каталоге. Как это сделать? Очень просто. Функции обычно описываются  в  начале строки. Первым в строке вы найдете именно тип результата, возвращаемого функцией. Так что мы попросим программу grep искать все строки, в которых в начале стоит слово «int». Вот команда, которую нужно использовать:

grep ^int *.cpp

Если вы запустите ее в одном из каталогов с вашими исходными файлами, то, возможно, увидите, что эта программа найдет все функции, возвращающие целое. Хотя, конечно, grep — не идеал, но это поразительно быстрая и очень маленькая программа. Она настолько близка к идеалу, насколько это может компьютерная программа.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии