括号表达式中反斜杠字符的处理

问题描述 投票:0回答:1

GNU awk 手册的3.4 使用括号表达式部分,内容为

要在括号表达式中包含字符“\”、“]”、“-”或“^”之一,请在其前面添加“\”。例如:
     

[d\]]

匹配“d”或“]”。此外,如果将 ']' 放在左括号 '[' 之后,则右括号将被视为要匹配的字符之一。

括号表达式中对 '\' 的处理与其他 awk 实现兼容,并且也适用由 POSIX 强制执行。

另一方面,POSIX awk正则表达式 部分并未将

\]
列为具有特殊含义。以下是使用 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 强制执行的,这是否错误,还是我忽略了某些内容?

regex awk language-lawyer posix
1个回答
0
投票

您可能结合您使用的 gnu grep 版本阅读了错误的文档。 当我运行

man grep
时,我收到另一条有关
]
字符的文本:

大多数元字符失去了其内部的特殊含义 括号表达式。 要包含文字 ],请将其放在前面 列表。 类似地,要包含文字 ^,请将其放置在除开头之外的任何位置。 最后,要包含文字 - 将其放在最后。

© www.soinside.com 2019 - 2024. All rights reserved.