Регулярки
Существуют три различных версии синтаксисов регулярных выражений:
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
- аналогично предыдущему, но с экранированием \{ \}