GNU awk 手册的3.4 使用括号表达式部分,内容为
要在括号表达式中包含字符“\”、“]”、“-”或“^”之一,请在其前面添加“\”。例如:
[d\]]
匹配“d”或“]”。此外,如果将 ']' 放在左括号 '[' 之后,则右括号将被视为要匹配的字符之一。括号表达式中对 '\' 的处理与其他 awk 实现兼容,并且也适用由 POSIX 强制执行。
\]
列为具有特殊含义。以下是使用 GNU awk(版本 5.3.1)和 GNU grep(版本 3.11)进行的一些实验,这些实验暴露了括号表达式中 \
的冲突处理:
$ echo d | awk '/[d\]]/'
d
$ echo d | grep -E '[d\]]'
$ echo ']' | awk '/[d\]]/'
]
$ echo ']' | grep -E '[d\]]'
问题是:
GNU awk 文档声称 GNU awk 中括号表达式中
\
的处理是 POSIX 强制执行的,这是否错误,还是我忽略了某些内容?
您可能结合您使用的 gnu grep 版本阅读了错误的文档。 当我运行
man grep
时,我收到另一条有关 ]
字符的文本:
大多数元字符失去了其内部的特殊含义 括号表达式。 要包含文字 ],请将其放在前面 列表。 类似地,要包含文字 ^,请将其放置在除开头之外的任何位置。 最后,要包含文字 - 将其放在最后。