ack:通过正则表达式从搜索中排除特定目录

时间:2011-12-29 15:35:25

标签: regex ack

如何使用ack通过RegEx忽略特定目录?

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

我也通过

尝试了负面的背后隐藏
ack -G '(?<!test)' pattern

但这不起作用。它不排除test目录。

4 个答案:

答案 0 :(得分:21)

使用未记录的选项“--invert-file-match”(我系统上的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没有记录。

答案 1 :(得分:10)

使用ack2,似乎you can't use holygeek's solution.

以下是我使用-v-x

的方式
ack -v -g 'test' | ack -x pattern

更一般地说,'test'可以是dirs排除

的正则表达式

答案 2 :(得分:5)

为了使用1.96之前版本的ack(像我一样)的人们的利益,你可以使用正则表达式环顾四周来做到这一点。这是一个例子:

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

这会在所有text-pattern个文件中以递归方式(来自。)搜索其路径中没有Javatest字样的文件。

答案 3 :(得分:2)

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

来自this thread

  

是的,在2.15_01中我们添加了:

     
      
  • ack现在支持--ignore-dir = match:....谢谢,Ailin Nemui! (GitHub门票#42)
  •   

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

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

例如,您无法将".*/docs/generated/.*"之类的路径与之匹配。

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