booksread-online.com

Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"

Перейти на страницу:

Команда

grep
принимает опции, шаблон соответствия и файлы для поиска:

<b>grep</b> [<i>опции</i>]<i> шаблон</i> [<i>файлы</i>]

Если имена файлов не заданы, команда анализирует стандартный ввод.

Давайте начнем с изучения основных опций команды

grep
. И на этот раз в табл. 2.14 приведены только самые важные из них; полный список см. на страницах интерактивного справочного руководства.

Таблица 2.14

Опция Описание
Вместо вывода на экран совпавших с шаблоном строк выводит их количество
-E
Включает расширенные регулярные выражения
-h
Ужимает обычное начало каждой строки вывода за счет удаления имени файла, в котором строка найдена
-i
Не учитывает регистр букв
-l
Перечисляет имена файлов со строками, совпадающими с шаблоном; не выводит сами найденные строки
-v
Меняет шаблон соответствия для выбора вместо строк, соответствующих шаблону, несовпадающих с ним строк

Выполните упражнение 2.17.

Упражнение 2.17. Основной вариант использования команды
grep

Посмотрим команду

grep
в действии на примерах простых шаблонов.

$ <b>grep in words.txt</b>

When shall we three meet again. In thunder, lightning, or in rain?

I come, Graymalkin!

$ <b>grep -c in words.txt words2.txt</b>

words.txt:2 words2.txt:14

$ <b>grep -c -v in words.txt words2.txt</b>

words.txt:9

words2.txt:16$

Как это работает

В первом примере нет опций; в нем просто ищется строка

in
в файле words.txt и выводятся на экран любые строки, соответствующие условию поиска. Имя файла не отображается, поскольку поиск велся в единственном файле.

Во втором примере в двух разных файлах подсчитывается количество строк, соответствующих шаблону. В этом случае имена файлов выводятся на экран.

В заключение применяется опция

-v
для инвертирования критерия поиска и подсчета строк, не совпадающих с шаблоном.

Регулярные выражения

Как вы убедились, основной вариант применения команды grep легко усвоить. Теперь пришло время рассмотреть основы построения регулярных выражений, которые позволят вам выполнять более сложный поиск. Как упоминалось ранее в этой главе, регулярные выражения применяются в системе Linux и многих языках программирования с открытым исходным кодом. Вы можете использовать их в редакторе vi и в скриптах на языке Perl, применяя одни и те же принципы, общие для регулярных выражений, где бы они ни появлялись.

При обработке регулярных выражений определенные символы интерпретируются особым образом. В табл. 2.15 приведены наиболее часто используемые в регулярных выражениях символы.

Таблица 2.15

Символ Описание
^
Привязка к началу строки
$
Привязка к концу строки
.
Любой одиночный символ
[]
В квадратных скобках содержится диапазон символов, с любым из них возможно совпадение, например, диапазон символов
a-e
или инвертированный диапазон, перед которым стоит символ
^

Если вы хотите использовать любые из перечисленных символов как "обычные", поставьте перед ними символ

. Например, если нужно найти символ
$
, просто введите
$
.

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

Таблица 2.16

Проверочный шаблон Описание
[:alnum:]
Буквенно-цифровые символы
[:alpha:]
Буквы
[:ascii:]
Символы таблицы ASCII
[:blank:]
Пробел или табуляция
[:cntrl:]
Управляющие символы ASCII
[:digit:]
Цифры
[:graph:]
Неуправляющие и непробельные символы
[:lower:]
Строчные буквы
[:print:]
Печатные символы
[:punct:]
Знаки пунктуации
[:space:]
Пробельные символы, включая вертикальную табуляцию
[:upper:]
Прописные буквы
[:xdigit:]
Шестнадцатиричные цифры

Кроме того, если задана опция

=E
для расширенного соответствия, за регулярным выражением могут следовать и другие символы, управляющие выполнением проверки на соответствие шаблону (табл. 2.17). В команде
grep
перед этими символами необходимо вводить символ
.

Таблица 2.17

Опция  Описание
?
Совпадение не обязательно, но возможно не более одного раза
*
Совпадения может не быть, оно может быть однократным или многократным
+
Совпадение должно быть однократным или многократным
{<i>n</i>}
Совпадение должно быть 
<i>n</i>
раз
{<i>n</i>, }
Совпадение должно быть
<i>n</i>
раз и больше
{<i>n</i>, <i>m</i>}
Совпадение должно быть от
<i>n</i>
до
<i>m</i>
раз включительно
Перейти на страницу:
Оставить комментарий о книге
Подтвердите что вы не робот:*

Отзывы о книге "Основы программирования в Linux, автор: Мэтью Нейл":