This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
регулярные_выражения [2009/03/02 13:13] val created |
регулярные_выражения [2017/02/22 11:41] val [Точка -- . --] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Регулярные выражения ====== | ====== Регулярные выражения ====== | ||
+ | |||
+ | * [[https://youtu.be/BhbDsKetNn8|Видео: Про регулярные выражения]] | ||
+ | |||
+ | <code> | ||
+ | $ man re_format | ||
+ | </code> | ||
+ | |||
+ | * [[http://ru.wikipedia.org/wiki/Регулярное_выражение|Регулярное выражение]] | ||
+ | * [[http://www.ibm.com/developerworks/ru/library/l-regexp_1/|Секреты регулярных выражений]] | ||
+ | * [[Команды фильтры#grep]] | ||
+ | |||
+ | ===== Символы базовых регулярных выражений ===== | ||
+ | |||
+ | ==== Символ -- ^ -- ==== | ||
+ | Означает начало строки, но иногда, в зависимости от контекста, означает отрицание в регулярных выражениях. | ||
+ | <code> | ||
+ | $ 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 | ||
+ | </code> | ||
+ | |||
+ | ==== Знак доллара -- $ -- ==== | ||
+ | В конце регулярного выражения соответствует концу строки. | ||
+ | <code> | ||
+ | $ grep 'sh$' /etc/passwd | ||
+ | </code> | ||
+ | |||
+ | ==== Квадратные скобки -- [...] -- ==== | ||
+ | Предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества | ||
+ | <code> | ||
+ | $ grep '^[rs]' /etc/passwd | ||
+ | </code> | ||
+ | |||
+ | ==== Обратный слеш -- \ -- ==== | ||
+ | Служит для экранирования специальных символов, это означает, что экранированные символы должны интерпретироваться буквально, т.е. как простые символы (в некоторых случаях наоборот). | ||
+ | <code> | ||
+ | echo 172.16.10.254 gate.isp10.un >> /etc/hosts | ||
+ | |||
+ | grep -r "172\.16\.1\." /etc | ||
+ | </code> | ||
+ | |||
+ | ==== Экранированные "угловые скобки" -- \<...\> -- ==== | ||
+ | |||
+ | Отмечают границы слова (не работает в sed). | ||
+ | <code> | ||
+ | grep -R '\<sed\>' /usr/share | ||
+ | </code> | ||
+ | |||
+ | ==== Звездочка -- * -- ==== | ||
+ | Означает любое количество символа в строке, предшествующего "звездочке", в том числе и нулевое число символов. | ||
+ | |||
+ | ==== Точка -- . -- ==== | ||
+ | |||
+ | Означает один любой символ | ||
+ | |||
+ | ==== Экранированные "круглые скобки" -- \( \) -- ==== | ||
+ | Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "\|" и при извлечении подстроки. | ||
+ | <code> | ||
+ | $ cat catalog.txt | ||
+ | </code><code> | ||
+ | petrof ivan 234-56-78 | ||
+ | ivanof sidor 214-56-78 | ||
+ | </code><code> | ||
+ | $ sed 's/\(.*\) .* \(.*\)/\1 \2/' catalog.txt | ||
+ | </code> | ||
+ | |||
+ | ==== Экранированные "фигурные скобки" -- \{ \} -- ==== | ||
+ | Задают число вхождений предыдущего выражения. | ||
+ | <code> | ||
+ | $ grep '\(ro.*\)\{2\}' /etc/passwd | ||
+ | root:*:0:0:Charlie &:/root:/bin/csh | ||
+ | daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin | ||
+ | </code> | ||
+ | ===== Классы символов POSIX ===== | ||
+ | |||
+ | Заменяем в файле catalog.txt некоторые пробелы на TAB | ||
+ | <code> | ||
+ | $ sed 's/\(.*\)[[:space:]].*[[:space:]]\(.*\)/\1 \2/' catalog.txt | ||
+ | petrof 234-56-78 | ||
+ | ivanof 214-56-78 | ||
+ | </code> | ||
+ | |||
+ | ===== Символы расширенных регулярных выражений ===== | ||
+ | |||
+ | Многие символы экранируемые в базовых выражениях -- () {} | -- но не -- <> -- используются без экранирования. | ||
+ | |||
+ | ==== Знак вопроса -- ? -- ==== | ||
+ | |||
+ | Означает, что предыдущий символ или регулярное выражение встречается 0 или 1 раз. | ||
+ | <code> | ||
+ | $ grep -E '^r?o' /etc/passwd | ||
+ | root:*:0:0:Charlie &:/root:/bin/csh | ||
+ | operator:*:2:5:System &:/:/usr/sbin/nologin | ||
+ | </code> | ||
+ | ==== Знак "плюс" -- + -- ==== | ||
+ | Указывает на то, что предыдущий символ или выражение встречается 1 или более раз (добавляем произвольное количество символов разделителей в файл catalog.txt). | ||
+ | <code> | ||
+ | $ sed -E 's/([[:alnum:]]+)[[:space:]]+[[:alnum:]]+[[:space:]]+([[:alnum:]]+)/\1 \2/' catalog.txt | ||
+ | petrof 234-56-78 | ||
+ | ivanof 214-56-78 | ||
+ | </code> | ||