为什么我需要在awk字符串常量中转义括号?

时间:2015-04-27 04:08:40

标签: awk

考虑一个名为test的简单文件,其中包含以下文本:

abc(def)

使用awk,如果我发现这样可行:

awk '$0 ~ "abc\(def\)"' test

但如果没有正确转义括号,它将无法工作:

awk '$0 ~ "abc(def)"' test

删除右括号,我收到了这个错误:

awk: line 1: regular expression compile failed (missing ')')
abc(def

在awk中由""字符串常量引用的字符串是不是?为什么()被视为字符串常量中的正则表达式特殊字符?

2 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,那么答案就是这样:

awk -F ',' '{ print "(" $1, $2 ")" }'

您应该在“” 之间键入。任何特殊符号都可以用“”

打印

答案 1 :(得分:1)

在查看gawk here的文档时,它说(强调我的)

  

正则表达式匹配和非匹配也是非常常见的表达式。该   ~!~运算符的左操作数是一个字符串。 正确   操作数是用斜杠括起来的常量正则表达式   (/ regexp /),或任何表达式,其字符串值用作动态   正则表达式(请参阅使用动态正则表达式一节)。

运行脚本时会创建正则表达式常量,并且在程序运行期间无法更改正则表达式,而脚本可以更改动态正则表达式。