答案1
GNUawk
手册 (秒。 3.5) 记录了正则表达式\<
是特定于 gawk 的,因此不应期望它能在其他实现中工作。
根据man mawk
,如果在非特殊字符前面放置反斜杠,则反斜杠将被删除。因此,under mawk
,\<
被简单地解释为尖括号字符。
例子
我简化了正则表达式以提供不同行为的示例:
$ echo -e " a\n ab.conf\n <ac.conf" | gawk '/\<(a|x)/ { print}'
a
ab.conf
<ac.conf
$ echo -e " a\n ab.conf\n <ac.conf" | mawk '/\<(a|x)/ { print}'
<ac.conf
同样,gawk
将其解释\<
为单词的开头,而mawk
将其简单地解释为尖括号。
POSIX 对于这个问题是怎么说的
这GNUawk
手册解释:
如果您在字符串常量中将反斜杠放在不属于前面列出的字符之一的字符之前,POSIX awk 会故意将发生的情况保留为未定义。
换句话说,在这种情况下,不同的awk
解释者可以自由地做出自己的决定。