显然,包含字符类的 BSD Awk 中的括号表达式将忽略字符类之后的任何其他字符:
MacOS $ cat file.txt
_
-
.
a
B
8
:
;
@
~
,
MacOS $ awk '/[@~.[:alnum:]:;-]/' file.txt
.
a
B
8
@
~
MacOS $ awk '/[-;:@~.[:alnum:]]/' file.txt
-
.
a
B
8
:
;
@
~
MacOS $ awk '/[^@~.[:alnum:]:;-]/' file.txt
_
-
:
;
,
MacOS $ awk '/[^-;:@~.[:alnum:]]/' file.txt
_
,
MacOS $
Run Code Online (Sandbox Code Playgroud)
在 GNU Awk(在 Ubuntu 16.04 上显示)上,行为是不同的;括号表达式中的其他字符的处理方式相同,无论它们是在字符类之前还是之后:
Linux $ cat file.txt
_
-
.
a
B
8
: …
Run Code Online (Sandbox Code Playgroud)