转义AWK中的特殊字符

时间:2016-10-17 02:50:17

标签: regex escaping gawk

我想做一些简单的事情:

myregex = "A\?B"

  if (match($O, "A\?B")) print "YES"
  else print "NO"

在第一个例子中,我得到了这个:

warning: escape sequence '\?' treated as plain '?'

在第二个例子中,它与相应的行不匹配。

我在Windows上使用GAWK 3.1.6 - 从gnuwin32包

获取它

1 个答案:

答案 0 :(得分:2)

字符串常量(例如~/.bashrc)是scanned twice

  

awk第一次读取您的程序时,第二次是   它将匹配运算符左侧的字符串   右边的模式。

第一次扫描会吃掉第一个斜杠,所以你需要用另一个反斜杠转义反斜杠,即"A\?B"

"A\\?B"

但是,正如在the docs中所说的那样,通常最好使用 regexp常量

if (match($0, "A\\?B")) print "YES"; else print "NO";