Регулярки

Linux

splinter

Существуют три различных версии синтаксисов регулярных выражений:

BRE: Basic Regular Expressions (Базовый синтаксис регулярных выражений)
ERE: Extended Regular Expressions (Расширенный синтаксис регулярных выражений)
PCRE: Perl Regular Expressions (Синтаксис регулярных выражений языка программирования Perl)

В зависимости от используемого инструмента может использоваться один или несколько упомянутых синтаксисов.

К примеру, инструмент grep поддерживает параметр -E, позволяющий принудительно использовать расширенный синтаксис регулярных выражений (ERE) при разборе регулярного выражения, в то в время, как параметр -G позволяет принудительно использовать базовый синтаксис регулярных выражений (BRE), а параметр -P - синтаксис регулярных выражений языка программирования Perl (PCRE).

Учтите и то, что инструмент grep также поддерживает параметр -F, позволяющий прочитать регулярное выражение без обработки.

Инструмент sed также поддерживает параметры, позволяющие выбирать синтаксис регулярных выражений.

grep 'some text' filename - поиск по содержанию текста в строке файла

grep -E 'a|b' filename - поиск по содержанию a или b в строке файла

grep -G 'a\|b' filename - аналогично предыдущему, но необходимо использовать экранирование \, т.к. используется BRE

grep -E 'n*' filename - поиск вхождения n от нуля и больше

grep -E 'n+' filename - поиск вхождения n от одного и больше

grep n$ filename - поиск совпадения в конце строки (символ $ обозначет конец строки)

grep ^n filename - поиск совпадения в начале (или с первых символов) строки

grep '\btext\b' filename - поиск с использованием разделителя слов \b, ищет не по содержанию слова в тексте, а по отдельным словам

grep -w 'text' filename - поиск по слову, исключая вхождения в другие слова

echo text | sed 's/text/new_text/' - sed использует регулярные выражения для изменения потока данных s/регулярное выражение/строка для замены/, слеши могут быть заменены на другие символы для удобочитаемости (: _ |)

echo text | sed 's/text/&&/' - символ амперсанда может использоваться для ссылки на искомую (и найденную) строку. В данном примере амперсанд используется для удвоения количества найденных строк

echo 2014-04-01 | sed 's/....-..-../YYYY-MM-DD/' - в регулярном выражении простой символ точки может обозначать любой символ

echo text | sed 's_\(text\)_\1added text_' - круглые скобки используются для группировки частей регулярного выражения, на которые впоследствии могут быть установлены ссылки. В данном примере скобки экранированы \ и \1 означет ссылку на выражение в первых скобках

echo 2014-04-01 | sed 's/\(....\)-\(..\)-\(..\)/\1+\2+\3/' -  в случае использования более чем одной пары круглых скобок, ссылка на каждую из них может быть осуществлена путем использования последовательных числовых значений. Результат - 2014+04+01

echo 01.05.1889 | sed 's|\(..\).\(..\).\(....\)|\2/\1/\3|' - результат 05/01/1889 (еще пример применения скобок)

echo -e 'сегодня\tтеплый\tдень' | sed 's_\s_ _g' - последовательность символов \s может использоваться для ссылки на такой символ, как символ пробела или табуляции. В данном примере осуществляется глобальный поиск последовательностей символов пробелов \s, которые заменяются на 1 символ пробела

grep -E 'text?' filename - символ знака вопроса указывает на то, что предыдущий символ является необязательным

grep -E 'n{3}' filename - {количество посторений предыдущего символа}, в данном примере осуществляется поиск строк с ровно тремя символами n

grep -E 'n{2,5}' filename - дипазон повторений

grep 'n\{2,5\}' filename - аналогично предыдущему, но с экранированием \{ \}