awk 字符类之谜

Aar*_*son 5 awk

我似乎无法将字符类用于awk正则表达式,几乎完全按照此处的描述:

user@host:~$ awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

compiled limits:
max NF             32767
sprintf buffer      2040
user@host:~$ echo "host.company.com has address 192.168.22.82" |awk '/^[a-zA-Z0-9.-]+ has address/ { print $4 }'
192.168.22.82
user@host:~$ echo "host.company.com has address 192.168.22.82" |awk '/^[[:alnum:].-]+ has address/ { print $4 }'
user@host:~$
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么第二个命令找不到地址字段?

cuo*_*glm 8

这是一个错误mawk 1.3.3并在此处报告。您可以升级mawk 1.3.4或使用补丁来修复该错误。

$ mawk -W version
mawk 1.3.4 20130219
Copyright 2013, Thomas E. Dickey
Copyright 1996, Michael D. Brennan

internal regex
compiled limits:
max NF             32767
sprintf buffer      2040

$ echo "host.company.com has address 192.168.22.82" | mawk '/^[[:alnum:].-]+ has address/ { print $4 }'
192.168.22.82
Run Code Online (Sandbox Code Playgroud)

mawk与 with 一样使用扩展的正则表达式egrep,因此它必须支持 POSIX 字符类。


Chi*_*g64 5

您所指的文档是 的 GNU 版本Awk,但您使用的版本是mawk(如您的第一个命令所示),它是一种awk似乎不支持 POSIX 字符类(如[:alpha:]或)的变体[:alnum:]

编辑:正如Gnouc提到的mawk从版本1.3.4开始支持 POSIX 字符类,因此更新可以解决您的问题。