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
Last revision Both sides next revision
регулярные_выражения [2012/02/15 13:17]
val
регулярные_выражения [2017/04/04 13:30]
val [Регулярные выражения]
Line 1: Line 1:
 ====== Регулярные выражения ====== ====== Регулярные выражения ======
 +
 +  * [[https://​youtu.be/​BhbDsKetNn8|Видео:​ Про регулярные выражения]]
  
 <​code>​ <​code>​
 $ man re_format $ man re_format
-</​code>​ 
  
-[[http://​ru.wikipedia.org/​wiki/​Регулярное_выражение]]+$ man regex 
 +</code>
  
-[[http://​www.ibm.com/​developerworks/​ru/​library/​l-regexp_1/​]]+  * [[http://​ru.wikipedia.org/​wiki/​Регулярное_выражение|Регулярное выражение]] 
 +  * [[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:\ +</​code>​ 
-        :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>​
-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>​ 
-$ grep '​\<​[[:​alpha:​]]\{X\}\>'​ /​etc/​login.conf 
-        :​ignorenologin:​\ 
-#       :​ignorenologin:​\ 
-#       :​maxmemorysize-cur=128M:​\ 
-#       :​refreshperiod@:​\ 
-#       :​refreshperiod@:​\ 
  
-$ grep '​\<​[A-Za-z]\{X\}\>'​ /​etc/​login.conf +Заменяем в файле catalog.txt ​некоторые ​пробелы на TAB
-</​code>​ +
- +
-Заменяем в файле catalog.txt пробел на TAB+
 <​code>​ <​code>​
 $ sed '​s/​\(.*\)[[:​space:​]].*[[:​space:​]]\(.*\)/​\1 \2/' catalog.txt ​ $ sed '​s/​\(.*\)[[:​space:​]].*[[:​space:​]]\(.*\)/​\1 \2/' catalog.txt ​
Line 116: Line 83:
 ivanof 214-56-78 ivanof 214-56-78
 </​code>​ </​code>​
 +
 ===== Символы расширенных регулярных выражений ===== ===== Символы расширенных регулярных выражений =====
  
Line 131: Line 99:
 Указывает на то, что предыдущий символ или выражение встречается 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>​
  
регулярные_выражения.txt · Last modified: 2023/01/10 10:43 by val