如何使用Awk匹配含括号的g(tot)并输出对应文件行?
解决awk匹配含括号字符串无输出的问题
你猜的完全没错!问题就出在括号上——在awk的正则表达式语法里,(和)是特殊元字符,用来表示正则分组,而不是字面意义上的括号。所以你写的/g(tot)/其实是在匹配包含gtot(正则分组(tot)在这里仅做分组标记,不影响匹配内容)的行,自然找不到你要的g(tot)啦。
下面给你两种简单的解决办法:
方法一:转义正则中的特殊字符
把括号用反斜杠\转义,明确告诉awk这是需要匹配的字面字符,而非正则元字符。修改后的命令如下:
awk '/g\(tot\)/{print}' ./*/*.out
注:因为用单引号包裹awk脚本,shell不会解析里面的反斜杠,直接写\(和\)就能生效。
方法二:使用字符串精确匹配(更省心)
如果只是要精确查找包含g(tot)这个字面字符串的行,完全可以跳过正则,改用awk的index()函数——它会直接在每行文本里定位指定的字面字符串,找到就返回非0的位置值,这时我们就打印该行:
awk 'index($0, "g(tot)") != 0 {print}' ./*/*.out
这种方法不用考虑任何正则特殊字符,适合简单的精确匹配场景。
内容的提问来源于stack exchange,提问作者Jan Rostenkowski
相关产品推荐
相关产品推荐

