<Предыдущая | Содержание: | Следующая>
перемежаемость
Первая из обсуждаемых нами расширенных функций регулярных выражений называется чередование, который позволяет найти совпадение из набора выражений. Подобно тому, как выражение в квадратных скобках позволяет одному символу соответствовать из набора указанных символов, чередование допускает совпадения из набора строк или других регулярных выражений.
Для демонстрации мы будем использовать GREP в сочетании с эхо. Во-первых, давайте попробуем сопоставить простую старую строку:
[я @ linuxbox ~] $ эхо "ААА" | grep AAA
AAA
[я @ linuxbox ~] $ эхо "BBB" | grep AAA
[я @ linuxbox ~] $
[я @ linuxbox ~] $ эхо "ААА" | grep AAA
AAA
[я @ linuxbox ~] $ эхо "BBB" | grep AAA
[я @ linuxbox ~] $
Довольно простой пример, в котором мы передаем вывод эхо в GREP и посмотрите результаты. Когда происходит совпадение, мы видим его распечатанным; когда совпадений нет, мы не видим результатов.
Теперь мы добавим чередование, обозначенное метасимволом вертикальной черты:
[я @ linuxbox ~] $ эхо "ААА" | grep -E 'AAA | BBB'
AAA
[я @ linuxbox ~] $ эхо "BBB" | grep -E 'AAA | BBB'
BBB
[я @ linuxbox ~] $ эхо "CCC" | grep -E 'AAA | BBB'
[я @ linuxbox ~] $
[я @ linuxbox ~] $ эхо "ААА" | grep -E 'AAA | BBB'
AAA
[я @ linuxbox ~] $ эхо "BBB" | grep -E 'AAA | BBB'
BBB
[я @ linuxbox ~] $ эхо "CCC" | grep -E 'AAA | BBB'
[я @ linuxbox ~] $
Здесь мы видим регулярное выражение 'AAA | BBB', что означает «сопоставить либо строку AAA или строка BBB. » Обратите внимание, что, поскольку это расширенная функция, мы добавили -E вариант GREP (хотя мы могли бы просто использовать задать расширенное program вместо этого), и мы заключили регулярное выражение в кавычки, чтобы оболочка не интерпретировала метасимвол вертикальной полосы как оператор канала. Чередование не ограничивается двумя вариантами:
[я @ linuxbox ~] $ эхо "ААА" | grep -E 'AAA | BBB | CCC'
AAA
[я @ linuxbox ~] $ эхо "ААА" | grep -E 'AAA | BBB | CCC'
AAA
Чтобы объединить чередование с другими элементами регулярного выражения, мы можем использовать () для разделения чередования:
[я @ linuxbox ~] $ grep -Eh '^ (bz | gz | zip)' dirlist * .txt
[я @ linuxbox ~] $ grep -Eh '^ (bz | gz | zip)' dirlist * .txt
Это выражение будет соответствовать именам файлов в наших списках, которые начинаются с «bz», «gz» или «zip». Если бы мы не использовали круглые скобки, значение этого регулярного выражения:
[я @ linuxbox ~] $ grep -Eh '^ bz | gz | zip' dirlist * .txt
[я @ linuxbox ~] $ grep -Eh '^ bz | gz | zip' dirlist * .txt
изменяется, чтобы соответствовать любому имени файла, начинающемуся с «bz» или содержит «Gz» или содержит «Застежка-молния».