Опция | Описание |
---|---|
-с | Вместо вывода на экран совпавших с шаблоном строк выводит их количество |
-E | Включает расширенные регулярные выражения |
-h | Ужимает обычное начало каждой строки вывода за счет удаления имени файла, в котором строка найдена |
-i | Не учитывает регистр букв |
-l | Перечисляет имена файлов со строками, совпадающими с шаблоном; не выводит сами найденные строки |
-v | Меняет шаблон соответствия для выбора вместо строк, соответствующих шаблону, несовпадающих с ним строк |
Выполните упражнение 2.17.
grep
Посмотрим команду grep
в действии на примерах простых шаблонов.
$ grep in words.txt
When shall we three meet again. In thunder, lightning, or in rain?
I come, Graymalkin!
$ grep -c in words.txt words2.txt
words.txt:2 words2.txt:14
$ grep -c -v in words.txt words2.txt
words.txt:9
words2.txt:16$
Как это работает
В первом примере нет опций; в нем просто ищется строка in
в файле words.txt и выводятся на экран любые строки, соответствующие условию поиска. Имя файла не отображается, поскольку поиск велся в единственном файле.
Во втором примере в двух разных файлах подсчитывается количество строк, соответствующих шаблону. В этом случае имена файлов выводятся на экран.
В заключение применяется опция -v
для инвертирования критерия поиска и подсчета строк, не совпадающих с шаблоном.
Как вы убедились, основной вариант применения команды grep легко усвоить. Теперь пришло время рассмотреть основы построения регулярных выражений, которые позволят вам выполнять более сложный поиск. Как упоминалось ранее в этой главе, регулярные выражения применяются в системе Linux и многих языках программирования с открытым исходным кодом. Вы можете использовать их в редакторе vi и в скриптах на языке Perl, применяя одни и те же принципы, общие для регулярных выражений, где бы они ни появлялись.
При обработке регулярных выражений определенные символы интерпретируются особым образом. В табл. 2.15 приведены наиболее часто используемые в регулярных выражениях символы.
Символ | Описание |
---|---|
^ | Привязка к началу строки |
$ | Привязка к концу строки |
. | Любой одиночный символ |
[] | В квадратных скобках содержится диапазон символов, с любым из них возможно совпадение, например, диапазон символов a-e или инвертированный диапазон, перед которым стоит символ ^ |
Если вы хотите использовать любые из перечисленных символов как "обычные", поставьте перед ними символ \
. Например, если нужно найти символ $
, просто введите \$
.
Есть также несколько полезных специальных проверочных шаблонов, которые могут указываться в квадратных скобках (табл. 2.16).
Проверочный шаблон | Описание |
---|---|
[:alnum:] | Буквенно-цифровые символы |
[:alpha:] | Буквы |
[:ascii:] | Символы таблицы ASCII |
[:blank:] | Пробел или табуляция |
[:cntrl:] | Управляющие символы ASCII |
[:digit:] | Цифры |
[:graph:] | Неуправляющие и непробельные символы |
[:lower:] | Строчные буквы |
[:print:] | Печатные символы |
[:punct:] | Знаки пунктуации |
[:space:] | Пробельные символы, включая вертикальную табуляцию |
[:upper:] | Прописные буквы |
[:xdigit:] | Шестнадцатиричные цифры |
Кроме того, если задана опция =E
для расширенного соответствия, за регулярным выражением могут следовать и другие символы, управляющие выполнением проверки на соответствие шаблону (табл. 2.17). В команде grep
перед этими символами необходимо вводить символ \
.