Вы можете попробовать использовать классы прописных символов:
[ghoti@pc ~]$ printf "a\n1\nb\n2\nc\n" | awk '/[[:digit:]]/'
1
2
[ghoti@pc ~]$
Насколько я знаю, нотация типа \d
на самом деле не является частью ERE, то есть диалектом регулярных выражений, понимаемымбольшинство вариантов awk (а также The One True Awk ).
UPDATE :
Как отмечалось в комментариях, некоторыеВ дистрибутивах Linux может быть установлена mawk
, маскирующаяся под awk
.mawk - это не то же самое, что awk.Это клон awk с минимальным набором функций, предназначенный скорее для скорости выполнения, чем для функциональности.И несмотря на то, что на своей странице руководства утверждает, что поддерживает расширенные регулярные выражения, mawk не может реализовать "классы" POSIX, такие как [:digit:]
, [:upper:]
, [:lower:]
и т. Д.
Если вы используете системы, которые предоставляют нестандартные инструменты, такие как mawk
вместо стандартных, тогда вы должны ожидать, что вы будете жить в интересные времена.Разработчик сценариев Awk ожидает, что любой двоичный файл в /usr/bin/awk
будет вести себя как awk.Если этого не произойдет, система сломана.