在 awk 中匹配 HD [something] 模式

在 awk 中匹配 HD [something] 模式

这是 awk 文件densel

#!/usr/local/bin/awk -f
BEGIN {
beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(HD) [()]([[:space:]]*).*$"
}

$0 ~ beg_ere { print "MATCH" }

当使用具有以下行的文件时,我没有打印 MATCH

## HD [opcon]

答案1

$ cat tst.awk
BEGIN {
  #beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(HD) [()][[:space:]]*(.*)$"
   beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+HD [[][^]]*]"
}

$0 ~ beg_ere { print "MATCH" }

$ awk -f tst.awk file
MATCH

我把你原来的正则表达式留在那里,这样你就可以轻松地将它与工作正则表达式进行比较。您的主要问题是使用[()]包含 和 的括号表达式()当您应该使用文字[]围绕重复的括号表达式(例如 )时[^]]*。它[[:space:]]*(.*)$会匹配任何字符或不匹配任何字符,因此它没有做任何有用的事情,这就是我删除它的原因。周围(也无所事事)HD

相关内容