Чтение онлайн

ЖАНРЫ

Основы программирования в Linux
Шрифт:

Команда в аргументах

– exec
и
– ok
принимает последующие параметры в строке как собственные, пока не встретится последовательность
\;
В действительности команда, в аргументах
– exec
и
– ok
выполняет встроенную команду, поэтому встроенная команда должна завершиться экранированной точкой с запятой, для того чтобы команда
find
могла определить, когда ей следует продолжить поиск в командной строке аргументов, предназначенных для нее самой. Магическая строка
{}
— параметр специального типа для команд
– exec
и
– ok
, который заменяется полным путем к текущему файлу.

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

ls
:

$ find .
– newer while2 -type f -exec ls -l {} \;

– rwxr-xr-x 1 rick rick 275 Feb 8 17:07 ./elif3

– rwxr-xr-x 1 rick rick 336 Feb 8 16:52 ./words.txt

– rwxr-xr-x 1 rick rick 1274 Feb 8 16:52 ./words2.txt

– rwxr-xr-x 1 rick rick 504 Feb 8 18:43 ./_trap

$

Как

видите, команда
find
чрезвычайно полезна; она только требует небольшой практики для умелого ее применения. И такая практика, как и эксперименты с командой
find
, обязательно принесет дивиденды.

Команда grep

Вторая очень полезная команда, заслуживающая рассмотрения, — это команда

grep
. Необычное имя, означающее общий синтаксический анализатор регулярных выражений (general regular expression parser). Вы применяете команду
find
для поиска файлов в вашей системе, а команду
grep
для поиска строк в ваших файлах. Действительно, очень часто при использовании команды
find
команда
grep
передается после аргумента
– exec
.

Команда

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

grep [опции] шаблон [файлы]

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

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

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

Таблица 2.14

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

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

Упражнение 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 приведены наиболее часто используемые в регулярных выражениях символы.

Таблица 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

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