User Tools

Site Tools


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

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

Символы базовых регулярных выражений

Символ -- ^ --

Означает начало строки, но иногда, в зависимости от контекста, означает отрицание в регулярных выражениях.

$ grep '^s' /etc/passwd
sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin

Знак доллара -- $ --

В конце регулярного выражения соответствует концу строки.

$ grep 'sh$' /etc/passwd

Квадратные скобки -- [...] --

Предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества

$ grep '^[rs]' /etc/passwd

Обратный слеш -- \ --

Служит для экранирования специальных символов, это означает, что экранированные символы должны интерпретироваться буквально, т.е. как простые символы (в некоторых случаях наоборот).

echo 172.16.10.254 gate.isp10.un >> /etc/hosts

grep -r "172\.16\.1\." /etc

Экранированные "угловые скобки" -- \<...\> --

Отмечают границы слова (не работает в sed).

grep -R '\<sed\>' /usr/share

Звездочка -- * --

Означает любое количество символа в строке, предшествующего “звездочке”, в том числе и нулевое число символов.

Точка -- . --

Означает один любой символ

Экранированные "круглые скобки" -- \( \) --

Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором “\|” и при извлечении подстроки.

$ cat catalog.txt
petrof ivan 234-56-78
ivanof sidor 214-56-78
$ sed 's/\(.*\) .* \(.*\)/\1 \2/' catalog.txt

Экранированные "фигурные скобки" -- \{ \} --

Задают число вхождений предыдущего выражения.

$ grep '\(ro.*\)\{2\}' /etc/passwd
root:*:0:0:Charlie &:/root:/bin/csh
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin

Классы символов POSIX

alnum   alpha   ascii   blank   cntrl   digit   graph   lower
print   punct   space   upper   word    xdigit

Заменяем в файле catalog.txt некоторые пробелы на TAB

$ sed 's/\(.*\)[[:space:]].*[[:space:]]\(.*\)/\1 \2/' catalog.txt 
petrof 234-56-78
ivanof 214-56-78

Символы расширенных регулярных выражений

Многие символы экранируемые в базовых выражениях – () {} | – но не – <> – используются без экранирования.

Знак вопроса -- ? --

Означает, что предыдущий символ или регулярное выражение встречается 0 или 1 раз.

$ grep -E '^r?o' /etc/passwd
root:*:0:0:Charlie &:/root:/bin/csh
operator:*:2:5:System &:/:/usr/sbin/nologin

Знак "плюс" -- + --

Указывает на то, что предыдущий символ или выражение встречается 1 или более раз (добавляем произвольное количество символов разделителей в файл catalog.txt).

$ sed -E 's/([[:alnum:]]+)[[:space:]]+[[:alnum:]]+[[:space:]]+([[:alnum:]]+)/\1 \2/' catalog.txt
petrof 234-56-78
ivanof 214-56-78
регулярные_выражения.txt · Last modified: 2023/01/10 10:43 by val