Выбрать главу

$ comet month_end.txt || (echo "Привет! Твой сценарий не работает." | \

mail dave; exit)

Символ '\' в конце первой строки означает, что команда будет продолжена в следующей строке.

Вспомним рассмотренный ранее пример, в котором команда sort сортирует содержимое текстового файла quarter_end.txt, записывая результат в файл quarter.sorted с последующим выводом его на печать:

$ sort quarter_end.txt > quarter.sorted && lp quarter.sorted

Применив метод группировки команд, можно одновременно с печатью файла скопировать его в каталог /logs.

$ sort quarter_end.txt > quarter.sorted && \

(cp quarter.sorted /logs/quarter.sorted; lp quarter.sorted)

6.4. Заключение

При создании сложных инструкций большую роль играют операторы && и. Они позволяют выполнить указанную после них команду или группу команд только в том случае, если была (или не была) успешно выполнена предыдущая команда или группа команд.

ЧАСТЬ 2

Фильтрация текста

ГЛАВА 7

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

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

В этой главе рассматриваются следующие темы:

   • создание шаблонов для поиска выражений, стоящих в начале или в конце строки;

   • создание шаблонов для поиска символов, встречающихся неопределенное число раз;

   • создание шаблонов для поиска специальных символов;

   • создание шаблонов для поиска символов из указанного набора или диапазона;

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

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

Регулярные выражения в той или иной форме используются всеми основными текстовыми редакторами и утилитами, выполняющими фильтрацию текста. К сожалению, наборы поддерживаемых выражений несколько различаются от программы к программе, но существуют так называемые базовые регулярные выражения, которые во всех программах обрабатываются одинаково. Именно их мы и рассмотрим в настоящей главе. Единственное исключение -oператор \{ \}, который поддерживается в программах sed и grep, но не в awk.

В табл. 7.1 перечислены метасимволы и операторы, применяемые в базовых регулярных выражениях.

Таблица 7.1. Метасимволы и операторы базовых регулярных выражений

^ Соответствует началу строки
$ Соответствует концу строки
[] Соответствует любому символу из числа заключенных в скобки; чтобы задать диапазон символов, укажите первый символ диапазона, дефис и последний символ (например, вместо шаблона [12345] можно ввести
[1-5])
[^] Соответствует любому символу, кроме тех, что указаны в скобках
\ Отменяет специальное значение следующего за ним метасимвола
. Соответствует любому отдельному символу
* Указывает на то, что предыдущий шаблон встречается ноль или более раз; в программах awk и egrep, где испольуются расширенные регулярные выражения, существует два дополнительных оператора:
? (означает, что предыдущий шаблон встречается не более одного раза) и
+ (означает, что предыдущий шаблон встречается один или более раз)
\{n\} Указывает на то, что предыдущий шаблон встречается ровно n раз
\{n,\} Указывает на то, что предыдущий шаблон встречается не менее п раз
\{,m\} Указывает на то, что предыдущий шаблон встречается не более т раз
\{n, m\} Указывает на то, что предыдущий шаблон встречается не менее n раз и не более т раз

7.1. Поиск одиночных символов с помощью метасимвола '.'

Метасимвол '.' соответствует любому одиночному символу. Если, например, требуется найти слово, начинающееся с подстроки "beg", после которой стоит произвольный символ, а за ним -cимвол 'n', задайте шаблон beg.n. Будут найдены такие слова, как "begin", "began" и т. д.

Данный метасимвол удобно применять при фильтрации результатов работы команды ls -l для поиска файлов, имеющих требуемые права доступа. Следующий шаблон соответствует файлам, выполнять которые могут все пользователи: