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:55] 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 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> | ||
| Line 50: | Line 50: | ||
| </code> | </code> | ||
| - | ==== Экранированные "круглые скобки" -- \( \) -- и классы символов ==== | + | ==== Звездочка -- * -- ==== |
| + | Означает любое количество символа в строке, предшествующего "звездочке", в том числе и нулевое число символов. | ||
| + | |||
| + | ==== Точка -- . -- ==== | ||
| + | |||
| + | Означает один любой символ | ||
| + | |||
| + | ==== Экранированные "круглые скобки" -- \( \) -- ==== | ||
| Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "\|" и при извлечении подстроки. | Предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "\|" и при извлечении подстроки. | ||
| <code> | <code> | ||
| $ cat catalog.txt | $ cat catalog.txt | ||
| - | <code> | ||
| - | petrof ivan 234-56-78 | ||
| - | ivanof sidor 214-56-78 | ||
| </code><code> | </code><code> | ||
| - | $ sed 's/\([[:alnum:]]*\)[[:space:]]*[[:alnum:]]*[[:space:]]*\([[:alnum:]]*\)/\1 \2/' catalog.txt | + | petrof ivan 234-56-78 |
| + | ivanof sidor 214-56-78 | ||
| + | </code><code> | ||
| + | $ sed 's/\(.*\) .* \(.*\)/\1 \2/' catalog.txt | ||
| </code> | </code> | ||
| Line 69: | 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 87: | Line 86: | ||
| ivanof 214-56-78 | ivanof 214-56-78 | ||
| </code> | </code> | ||
| + | |||
| ===== Символы расширенных регулярных выражений ===== | ===== Символы расширенных регулярных выражений ===== | ||
| Line 102: | 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> | ||