Какие типы регулярных выражений распознаны awk? Эта команда
echo "aa" | gawk '/a{2,3}/ {print}'
ничего не возвращает, пока
echo "a{2,3}" | gawk '/a{2,3}/ {print}'
возвраты a{2,3}
.
Так как другие расширенные regex функции как чередование вместо этого распознаны, где я могу найти точную ссылку? От GNU find
раздел руководства по awk регулярным выражениям, вышеупомянутый синтаксис должен быть принят с тех пор:
Интервалы указаны ‘{’ и ‘}’.
От руководство :
Первоначально, потому что старые программы могут использовать †{’ и †} ’ в regexp константах, простофиля не соответствовала выражениям интервала в regexps.
Однако начинающийся с версии 4.0, простофиля действительно соответствует выражениям интервала по умолчанию. Это вызвано тем, что совместимость с POSIX стала более важной для большинства пользователей простофили, чем совместимость со старыми программами.
С тех пор Ubuntu 12.04 имеет GNU awk 3.1.8, и 14.04 имеет 4.0.1 , необходимо быть на 12,04 (или другой такой старый выпуск).
<час> Набор POSIXLY_CORRECT
для поведения POSIX:
$ echo "a{2,3}" | POSIXLY_CORRECT=1 gawk '/a{2,3}/ {print}'
$ echo "aa" | POSIXLY_CORRECT=1 gawk '/a{2,3}/ {print}'
aa
Или, используйте -r
опция, если Вы хотите сохранить расширения GNU и выражения интервала использования:
-r
--re-interval
Позволяют выражения интервала (см. Операторы Regexp ) в regexps. Это - теперь gawk’s поведение по умолчанию. Тем не менее, эта опция остается (и для обратной совместимости и для использования в сочетании с
--traditional
).