2011-12-29 93 views
23

如何通过RegEx与ack忽略特定目录?ack:通过正则表达式排除搜索中的特定目录

我可以使用--ignore-dir选项,但这并不允许我指定RegEx。我希望能够忽略任何目录,其名称中有testtests或更复杂的模式。

我也通过

ack -G '(?<!test)' pattern 

试图负回顾后,但这不起作用。它不排除test目录。

回答

20

使用无证选项 “--invert文件匹配”(我的系统上ACK版本:1.96):

$ ack pattern -G 'test|tests' --invert-file-match 

嗯,这是排序的记载:

$ ack --help|grep invert 
-v, --invert-match Invert match: select non-matching lines 
--invert-file-match Print/search handle files that do not match -g/-G. 

它没有记录在其perldoc中。

+0

太棒了 - 谢谢!在我看的手册页中没有任何关于此的内容,但它起作用。 – AmigoNico 2013-07-03 23:21:09

5

为了让人们使用前1.96版本的ack(像我一样),你可以使用正则表达式来查看。这里有一个例子:

ack --java 'text-pattern' -G '^((?!(test|target)).)*$' 

它会搜索所有Java文件text-pattern递归没有的话在他们的路径testtarget(从)。

+0

这个结构是什么?^((!!(test | target))。)* $'是什么意思? – Scit 2013-11-12 09:55:54

10

随着ACK2,似乎you can't use holygeek's solution.

这里是我如何使用-v-x做到这一点:

ack -v -g 'test' | ack -x pattern 

更一般地,'test'可以一个正则表达式显示目录排除

+1

确实对于ack2,这是你想要的。谢谢! – igniteflow 2015-02-23 13:52:37

2

在最近版本的ack,你可以使用正则表达式与--ignore-dir

this thread

是的,在我们2.15_01补充说:

  • ACK现在支持 - 忽略DIR =匹配:....谢谢,艾琳Nemui! (GitHub的票#42)

GitHub的链接:https://github.com/petdance/ack2/issues/42

可悲的是,我认为这仅支持匹配的基本目录名,而不是完整路径。

例如,你不能匹配像".*/docs/generated/.*"这样的路径。

对此,请参阅(仍然打开)GitHub issue 291