с | Любой неспециальный символ c соответствует самому себе |
\c | Указание убрать любое специальное значение символа c |
^ | Начало строки |
$ | Конец строки |
. | Любой одиночный символ |
[...] | Любой символ из ...; допустимы диапазоны типа a-z |
[^...] | Любой символ не из ...; допустимы диапазоны |
\n | Строка, соответствующая n-му выражению \(...\) (только для grep) |
r* | Нуль или более вхождений r |
r+ | Одно или более вхождений r (только для egrep) |
r? | Нуль или одно вхождение r (только для egrep) |
r1r2 | За r1 следует r2 |
r1|r2 | r1 или r2 (только для egrep) |
\(r\) | Помеченное регулярное выражение r (только для grep); может быть вложенным |
(r) | Регулярное выражение r (только для grep); может быть вложенным |
| Никакое регулярное выражение не соответствует концу строки |
Таблица 4.1: Регулярные выражения grep
egrep (в порядке убывания приоритета)Метасимволы ^
$ привязывают шаблон к началу (^) или концу ($) строки. Например,$ grep From $MAIL
ищет строки, содержащие From
$ grep '^From' $MAIL
выдает строки, начинающиеся с From
grep в апострофы.Команда grep
[a-z] задает любую строчную букву. Но есть и различия — если класс символов команды grep начинается с символа слабого ударения то шаблон задает любой символ, кроме входящих в данный класс. Значит, [^0-9] задает любой символ, кроме цифры. Как и в интерпретаторе, обратная дробная черта экранирует символы ] и - в классе символов, но команды grep и ed требуют, чтобы эти символы использовались там, где их значение недвусмысленно. Например, шаблон [][-] задает открывающую или закрывающую квадратную скобку либо знак минус.Точка '.'
'?' в интерпретаторе: она задает любой символ. (Точка, по всей видимости, есть символ, назначение которого различно для разных программ.) Ниже приводятся два примера:$ ls -l | grep '^d'
$ ls -l | grep '^.......rw'
Символ '^'
ls -l задается любая строка права доступа.Операция "повторитель" ('*'
x* задает последовательность букв x произвольной длины, [a-zA-Z]* — любую строку букв, .* — все до конца строки, а .*x — все до последнего символа x в строке включительно. Необходимо отметить несколько важных моментов, связанных с повторителем. Во-первых, повторитель действует только на один символ, поэтому xy* соответствует x, за которым идут yy..., но не последовательности типа xyxyxy. Во-вторых, любое число включает нуль, поэтому если вы хотите, чтобы символ присутствовал, в шаблоне его нужно повторить. Например, правильным выражением, задающим строку букв, является такое: [a-zA-Z][a-zA-Z]* (буква, за которой следует нуль или более букв). Регулярное выражение .* соответствует — *, т.е. метасимволу интерпретатора, используемому для имен файлов.Ни одно регулярное выражение команды grep
grep простым языком программирования. Вспомните, что второе поле файла паролей содержит зашифрованный пароль. Приведенная ниже команда проводит поиск пользователей, не имеющих пароля:$ grep '^[^:]*::' /etc/passwd
Шаблон расшифровывается так: начало строки, любое число символов, отличных от двоеточия, два двоеточия.