你好ack
新手(实际上是半小时前开始的)。我对搜索结果的质量印象深刻。
但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约20个带有注释行的结果和带有实际代码的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/。