Как включить интервальное регулярное выражение в 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.