从.txt文件中打印出一行,该行中包含带有括号的关键字

时间:2019-03-09 01:57:51

标签: awk

我正在尝试打印出其中包含字符“ g(tot)”的一堆输出文件的行。

awk '/g(tot)/{print}' ./*/*.out

但是,这没有打印任何内容,这似乎是由于“ tot”周围的括号引起的。我该如何解决?

2 个答案:

答案 0 :(得分:1)

()在正则表达式中被解释为特殊字符。

使用(转义)\

 awk '/g\(tot\)/{print}' ./*/*.out

答案 1 :(得分:0)

F:\eclipse\plugins\org.[...].jarRegEx中的特殊字符,它们用于捕获组中的东西

  

(…)
  像算术一样,圆括号用于将正则表达式分组。它们可用于连接包含交替运算符“ |”的正则表达式。例如,“ @(samp | code){[^}] +}”与“ @code {foo}”和“ @samp {bar}”都匹配。 (这些是Texinfo格式的控制序列。此列表中进一步说明了“ +”。)

所以()实际上匹配/g(tot)/而不是gtot
您需要像g(tot)这样逃避它。
另外,您也可以删除部分/g\(tot\)/,这是在条件之后暗含的,因此总计为:

{print}

但是,对于这个简单的任务,我建议您使用awk '/g\(tot\)/' ./*/*.out 代替:

grep

您也可以使用awk 'g\(tot\)' ./*/*.out

sed