This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
регулярные_выражения [2009/03/02 13:24] val |
регулярные_выражения [2012/02/16 08:58] val |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Регулярные выражения ====== | ====== Регулярные выражения ====== | ||
- | man re_format | ||
- | ===== Символы базовых регулярных выражений ===== | ||
- | ==== Звездочка -- * -- ==== | + | <code> |
- | Означает любое количество символа в строке, предшествующего "звездочке", в том числе и нулевое число символов. | + | $ man re_format |
+ | </code> | ||
- | ==== Точка -- . -- ==== | + | [[http://ru.wikipedia.org/wiki/Регулярное_выражение]] |
- | Означает не менее одного любого символа | + | |
+ | [[http://www.ibm.com/developerworks/ru/library/l-regexp_1/]] | ||
+ | |||
+ | ===== Символы базовых регулярных выражений ===== | ||
==== Символ -- ^ -- ==== | ==== Символ -- ^ -- ==== | ||
Line 21: | Line 23: | ||
<code> | <code> | ||
$ grep 'sh$' /etc/passwd | $ grep 'sh$' /etc/passwd | ||
- | root:*:0:0:Charlie &:/root:/bin/csh | ||
</code> | </code> | ||
Line 27: | Line 28: | ||
Предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества | Предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Метасимвол ^ означает отрицание множества | ||
<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> | ||
+ | grep 'bin\/sh' /etc/passwd | ||
+ | </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 90: | Line 69: | ||
</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 108: | Line 76: | ||
ivanof 214-56-78 | ivanof 214-56-78 | ||
</code> | </code> | ||
+ | |||
===== Символы расширенных регулярных выражений ===== | ===== Символы расширенных регулярных выражений ===== | ||
Line 123: | Line 92: | ||
Указывает на то, что предыдущий символ или выражение встречается 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> | ||