User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
  
регулярные_выражения.txt · Last modified: 2023/01/10 10:43 by val