^ | Соответствует началу строки |
$ | Соответствует концу строки |
[] | Соответствует любому символу из числа заключенных в скобки; чтобы задать диапазон символов, укажите первый символ диапазона, дефис и последний символ (например, вместо шаблона [12345] можно ввести |
[1-5]) | |
[^] | Соответствует любому символу, кроме тех, что указаны в скобках |
\ | Отменяет специальное значение следующего за ним метасимвола |
. | Соответствует любому отдельному символу |
* | Указывает на то, что предыдущий шаблон встречается ноль или более раз; в программах awk и egrep, где испольуются расширенные регулярные выражения, существует два дополнительных оператора: |
? (означает, что предыдущий шаблон встречается не более одного раза) и | |
+ (означает, что предыдущий шаблон встречается один или более раз) | |
\{n\} | Указывает на то, что предыдущий шаблон встречается ровно n раз |
\{n,\} | Указывает на то, что предыдущий шаблон встречается не менее п раз |
\{,m\} | Указывает на то, что предыдущий шаблон встречается не более т раз |
\{n, m\} | Указывает на то, что предыдущий шаблон встречается не менее n раз и не более т раз |
Метасимвол '.' соответствует любому одиночному символу. Если, например, требуется найти слово, начинающееся с подстроки "beg", после которой стоит произвольный символ, а за ним -cимвол 'n', задайте шаблон beg.n. Будут найдены такие слова, как "begin", "began" и т. д.
Данный метасимвол удобно применять при фильтрации результатов работы команды ls -l для поиска файлов, имеющих требуемые права доступа. Следующий шаблон соответствует файлам, выполнять которые могут все пользователи:
…x..x..x
Вот примеры отбора строк режима по этому шаблону:
drwxrwxrw- — не соответствует
-rw‑rw‑rw- — не соответствует
-rwxrwxr‑x -cоответствует
-rwxr‑xr‑x -cоответствует
Предположим, выполняется фильтрация текстового файла. Необходимо найти в нем строки, состоящие из десяти символов, из которых пятый и шестой — "ХС". Данная задача решается с помощью такого шаблона:
….ХС….
Он означает, что первые четыре символа могут быть произвольными, следующие два — "ХС", а последние четыре — тоже произвольные. Вот несколько примеров сравнения:
1234ХС9088 -cоответствует
4523ХХ9001 — не соответствует
0011ХА9912 — не соответствует
9931ХС3445 -cоответствует
Метасимвол '^' позволяет искать слова или символы, стоящие в начале строки. Например, благодаря шаблону ^d можно отобрать из списка, выводимого командой ls -l, только те записи, которые соответствуют каталогам:
drwxrwxrw- - соответствует
-rw‑rw‑rw- - не соответствует
drwxrwxr‑x -cоответствует.
-rwxr‑xr‑x — не соответствует
Вернемся к рассмотренному в предыдущем параграфе примеру фильтрации текстового файла. Шаблон ^001 соответствует строкам, начинающимся с символов "001". Результат его применения может быть таким:
1234ХС9088 — не соответствует
4523ХХ9001 — не соответствует
0011ХА9912 -cоответствует
993IXC3445 — не соответствует
Для поиска строк, у которых в четвертой позиции от начала стоит символ '1', можно воспользоваться следующим шаблоном:
^…1
В результате получим:
1234ХС9088 — не соответствует
4b23ХХ9001 — не соответствует
0011XA9912 -cоответствует
993ДХС3445 -cоответствует
Чтобы найти строки, начинающиеся с символов "comp", следует указать:
^comp
Давайте немного усложним этот шаблон. Предположим, после символов "comp" могут идти любые две буквы, но завершать последовательность должны символы "ing":
^comp..ing
Этот шаблон обеспечивает поиск таких слов, как "computing", "complaining" и т. д. Как показывает данный пример, в регулярном выражении можно сочетать различные шаблоны поиска.