如何从ack结果中排除注释?

时间:2013-09-19 09:06:57

标签: configuration comments ack

你好ack新手(实际上是半小时前开始的)。我对搜索结果的质量印象深刻。

但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约20个带有注释行的结果和带有实际代码的2个结果。

有没有办法在//#之后或/* */之间排除文字?

2 个答案:

答案 0 :(得分:1)

您可以跳过单行注释,如下所示;

# ignore matches after //
ack '^[^//]*word'
# ignore matches after #
ack '^[^#]*word'

如果您使用的是ag,请记住它会进行多行匹配:

# ignore matches after //
ag '^[^\n\r//]*word'
# ignore matches after #
ag '^[^\n\r#]*word'

答案 1 :(得分:0)

你不知道。相反,您可以标记源。

跳过注释将意味着动态解析输入,这通常来说很慢。而且,每种编程语言都有不同的注释语法,这使得实现此过程很简单。虽然您可以使用自己的正则表达式-例如对于C,请使用类似以下内容的命令:\/\*(\*(?!\/)|[^*])*\*\/-这些模式非常复杂,而且比快速搜索ack,ag和grep设计的价值更麻烦。您真正要寻找的是一种通过函数和类浏览代码的方法;这就是标记代码的目的:检查通用标记http://docs.ctags.io/en/latest/