User Tools

Site Tools


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

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
регулярные_выражения [2012/01/16 13:06]
val
регулярные_выражения [2023/01/10 10:43] (current)
val [Классы символов POSIX]
Line 1: Line 1:
 ====== Регулярные выражения ====== ====== Регулярные выражения ======
 +
 +  * [[https://​youtu.be/​BhbDsKetNn8|Видео:​ Про регулярные выражения]]
  
 <​code>​ <​code>​
-man re_format+man re_format 
 + 
 +$ man regex
 </​code>​ </​code>​
  
-[[http://​ru.wikipedia.org/​wiki/​Регулярное_выражение]] +  * [[http://​ru.wikipedia.org/​wiki/​Регулярное_выражение|Регулярное ​выражение]] 
- +  ​* ​[[http://​www.ibm.com/​developerworks/​ru/​library/​l-regexp_1/​|Секреты регулярных выражений]] 
-[[http://​www.ibm.com/​developerworks/​ru/​library/​l-regexp_1/​]]+  * [[Команды фильтры#​grep]]
  
 ===== Символы базовых регулярных выражений ===== ===== Символы базовых регулярных выражений =====
- 
-==== Звездочка -- * -- ==== 
-Означает любое количество символа в строке,​ предшествующего "​звездочке",​ в том числе и нулевое число символов. 
- 
-==== Точка -- . -- ==== 
- ​Означает не менее одного любого символа 
  
 ==== Символ -- ^ -- ====  ==== Символ -- ^ -- ==== 
Line 29: Line 27:
 <​code>​ <​code>​
 $ grep '​sh$'​ /etc/passwd $ grep '​sh$'​ /etc/passwd
-root:​*:​0:​0:​Charlie &:/​root:/​bin/​csh 
 </​code>​ </​code>​
  
Line 35: Line 32:
 Предназначены для задания подмножества символов. Квадратные скобки,​ внутри регулярного выражения,​ считаются одним символом,​ который может принимать значения,​ перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества Предназначены для задания подмножества символов. Квадратные скобки,​ внутри регулярного выражения,​ считаются одним символом,​ который может принимать значения,​ перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества
 <​code>​ <​code>​
-$ grep '^[rt]' /etc/passwd +$ grep '^[rs]' /etc/passwd
-root:​*:​0:​0:​Charlie &:/​root:/​bin/​csh +
-toor:​*:​0:​0:​Bourne-again Superuser:/​root:​ +
-tty:​*:​4:​65533:​Tty Sandbox:/:/​usr/​sbin/​nologin+
 </​code>​ </​code>​
 +
 ==== Обратный слеш -- \ -- ====  ==== Обратный слеш -- \ -- ==== 
 Служит для экранирования специальных символов,​ это означает,​ что экранированные символы должны интерпретироваться буквально,​ т.е. как простые символы (в некоторых случаях наоборот). Служит для экранирования специальных символов,​ это означает,​ что экранированные символы должны интерпретироваться буквально,​ т.е. как простые символы (в некоторых случаях наоборот).
 +<​code>​
 +echo 172.16.10.254 gate.isp10.un >> /etc/hosts
 +
 +grep -r "​172\.16\.1\."​ /etc
 +</​code>​
 +
 +==== Экранированные "​угловые скобки"​ -- \<​...\>​ -- ====
  
-==== Экранированные "​угловые скобки"​ -- \<​...\>​ -- ====  
 Отмечают границы слова (не работает в sed). Отмечают границы слова (не работает в sed).
 <​code>​ <​code>​
-$ grep '​var'​ /​etc/​login.conf +grep -R '\<sed\>' /usr/share
-        :​setenv=MAIL=/​var/​mail/​$,​BLOCKSIZE=K,​FTP_PASSIVE_MODE=YES:​\ +
-        :​nologin=/​var/​run/​nologin:​\ +
-# Russian Users Accounts. Setup proper environment variables. +
-#       :​setenv=MAIL=/​var/​mail/​$,​BLOCKSIZE=K:​\ +
-#       :​nologin=/​var/​run/​nologin:​\ +
- +
-grep '\<var\>' /etc/login.conf +
-        :​setenv=MAIL=/​var/​mail/​$,​BLOCKSIZE=K,​FTP_PASSIVE_MODE=YES:​\ +
-        :​nologin=/​var/​run/​nologin:​\ +
-#       :​setenv=MAIL=/​var/​mail/​$,​BLOCKSIZE=K:​\ +
-#       :​nologin=/​var/​run/​nologin:​\+
 </​code>​ </​code>​
 +
 +==== Звездочка -- * -- ====
 +Означает любое количество символа в строке,​ предшествующего "​звездочке",​ в том числе и нулевое число символов.
 +
 +==== Точка -- . -- ====
 +
 +Означает один любой символ
 +
 ==== Экранированные "​круглые скобки"​ -- \( \) -- ====  ==== Экранированные "​круглые скобки"​ -- \( \) -- ==== 
 Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "​\|"​ и при извлечении подстроки. Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "​\|"​ и при извлечении подстроки.
 <​code>​ <​code>​
-grep '​daily\|weekly'​ /​etc/​crontab +cat catalog.txt 
-# Perform daily/​weekly/​monthly maintenance+</code><​code>
-1       ​3 ​      ​* ​      ​* ​      ​* ​      ​root ​   periodic daily +
-15      4       ​* ​      ​* ​      ​6 ​      ​root ​   periodic weekly +
- +
-$ grep '​periodic \(daily\|weekly\)' ​/etc/​crontab +
-1       ​3 ​      ​* ​      ​* ​      ​* ​      ​root ​   periodic daily +
-15      4       ​* ​      ​* ​      ​6 ​      ​root ​   periodic weekly +
- +
-$ ls /usr/bin | sed '​s/​\(.*\)/​rm \1/' +
-rm CC +
-rm Mail +
-rm addftinfo +
-... +
-$ ls /usr/bin | sed -n '​s/​\(^a.*\)/​rm \1/​p'​ +
-rm addftinfo +
-rm addr2line +
-rm afmtodit +
-... +
-$ cat catalog.txt ​+
 petrof ivan 234-56-78 petrof ivan 234-56-78
 ivanof sidor 214-56-78 ivanof sidor 214-56-78
-<Ctrl-D> +</​code><​code>
 $ sed '​s/​\(.*\) .* \(.*\)/\1 \2/' catalog.txt $ sed '​s/​\(.*\) .* \(.*\)/\1 \2/' catalog.txt
-petrof 234-56-78 
-ivanof 214-56-78 
 </​code>​ </​code>​
 +
 ==== Экранированные "​фигурные скобки"​ -- \{ \} -- ==== ==== Экранированные "​фигурные скобки"​ -- \{ \} -- ====
 Задают число вхождений предыдущего выражения. Задают число вхождений предыдущего выражения.
Line 98: Line 76:
 </​code>​ </​code>​
 ===== Классы символов POSIX ===== ===== Классы символов POSIX =====
-[:class:] это альтернативный способ указания диапазона символов. 
 <​code>​ <​code>​
-$ grep '​\<​[[:​alpha:​]]\{X\}\>'​ /​etc/​login.conf +alnum   alpha   ascii   ​blank ​  ​cntrl ​  ​digit ​  ​graph ​  lower 
-        :​ignorenologin:​\ +print   ​punct ​  ​space ​  ​upper ​  ​word ​   xdigit
-#       :​ignorenologin:​\ +
-#       :​maxmemorysize-cur=128M:​\ +
-#       :​refreshperiod@:​\ +
-#       :​refreshperiod@:​\ +
- +
-$ grep '​\<​[A-Za-z]\{X\}\>'​ /​etc/​login.conf+
 </​code>​ </​code>​
- +Заменяем в файле catalog.txt ​некоторые ​пробелы на TAB
-Заменяем в файле catalog.txt пробел на TAB+
 <​code>​ <​code>​
 $ sed '​s/​\(.*\)[[:​space:​]].*[[:​space:​]]\(.*\)/​\1 \2/' catalog.txt ​ $ sed '​s/​\(.*\)[[:​space:​]].*[[:​space:​]]\(.*\)/​\1 \2/' catalog.txt ​
Line 116: Line 86:
 ivanof 214-56-78 ivanof 214-56-78
 </​code>​ </​code>​
 +
 ===== Символы расширенных регулярных выражений ===== ===== Символы расширенных регулярных выражений =====
  
Line 131: Line 102:
 Указывает на то, что предыдущий символ или выражение встречается 1 или более раз (добавляем произвольное количество символов разделителей в файл catalog.txt). Указывает на то, что предыдущий символ или выражение встречается 1 или более раз (добавляем произвольное количество символов разделителей в файл catalog.txt).
 <​code>​ <​code>​
-$ sed -E '​s/​([[:​alpha:​]]+)[[:​space:​]]+.*[[:​space:​]]+([[:​alpha:]]*)/\1 \2/' catalog.txt+$ sed -E '​s/​([[:​alnum:​]]+)[[:​space:​]]+[[:​alnum:​]]+[[:​space:​]]+([[:​alnum:]]+)/\1 \2/' catalog.txt
 petrof 234-56-78 petrof 234-56-78
 ivanof 214-56-78 ivanof 214-56-78
 </​code>​ </​code>​
  
регулярные_выражения.1326704786.txt.gz · Last modified: 2013/05/22 13:50 (external edit)