Как включить интервальное регулярное выражение в mawk?

Я столкнулся с проблемой, когда я запускаю mawk в Ubuntu 1604:

echo "123-456" | mawk '$0~/^[0-9]{3}/ {print $0}'  

Приведенная выше команда ничего не выводит, хотя обычный шаблон действительно соответствует.

Затем я попытался запустить egrep с тем же регулярным шаблоном:

echo "123-456" | egrep '^[0-9]{3}'  

Работает нормально!

Затем я посмотрел на документ mawk, кажется, что основная причина - "Интервальные выражения традиционно не были доступны в awk". Поле "{3}" в обычном шаблоне вызывает проблему. Если я использую "[0-9][0-9][0-9]" вместо "[0-9]{3}":, это работает нормально.
https://invisible-island.net/mawk/manpage/mawk.html https://www.math.utah.edu/docs/info/gawk_5.html

Я попробовал вариант --posix' and--re-interval'для mawk, они не работают оба.
Возможно ли, что можно включить "Интервальные выражения" в mawk? Моя ОС - "Ubuntu 16.04.4", mawk - "1.3.3-17ubuntu2".

Благодарю.

2 ответа

Пробую новую версию, теперь работает

      % mawk -W version
mawk 1.3.4 20230203
regex-funcs:        internal
      % echo "123-456" | mawk '$0~/^[0-9]{3}/ {print $0}'
123-456

очень отвратительное решение было бы

      echo "123-456" | {mawk/mawk2} 'BEGIN { FS = "^$" } /^[0-9][0-9][0-9]/' 

другой был бы еще более неуклюжим

      echo "123-456" | {mawk/mawk2} 'BEGIN { FS = "^$" 

    } match($0, "^[0-9]+") && (RLENGTH >= 3)' 

Конечно, это очень неидеально. Придерживайтесь gawk, если у вас есть доступ к нему для интервалов RE.

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