GNU awk принимают интервалы, указанные с помощью фигурных скобок в регулярных выражениях?

Какие типы регулярных выражений распознаны awk? Эта команда

echo "aa" | gawk '/a{2,3}/ {print}'

ничего не возвращает, пока

echo "a{2,3}" | gawk '/a{2,3}/ {print}'

возвраты a{2,3}.

Так как другие расширенные regex функции как чередование вместо этого распознаны, где я могу найти точную ссылку? От GNU find раздел руководства по awk регулярным выражениям, вышеупомянутый синтаксис должен быть принят с тех пор:

Интервалы указаны ‘{’ и ‘}’.

0
задан 13 March 2016 в 00:17

1 ответ

От руководство :

Первоначально, потому что старые программы могут использовать †˜ {’ и †˜} ’ в 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).

4
ответ дан 29 September 2019 в 10:19

Другие вопросы по тегам:

Похожие вопросы: