This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| 
                    регулярные_выражения [2012/02/15 13:22] 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 | ||
| - | </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 40: | Line 38: | ||
| Служит для экранирования специальных символов, это означает, что экранированные символы должны интерпретироваться буквально, т.е. как простые символы (в некоторых случаях наоборот). | Служит для экранирования специальных символов, это означает, что экранированные символы должны интерпретироваться буквально, т.е. как простые символы (в некоторых случаях наоборот). | ||
| <code> | <code> | ||
| - | grep 'bin\/sh' /etc/passwd | + | echo 172.16.10.254 gate.isp10.un >> /etc/hosts | 
| + | |||
| + | grep -r "172\.16\.1\." /etc | ||
| </code> | </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> | <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> | ||