27

如何通过带有ack的 RegEx 忽略特定目录?

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

我还尝试了负面的回顾

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

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

4

4 回答 4

22

使用未记录的选项“--invert-file-match”(我系统上的确认版本: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 中。

于 2011-12-29T16:31:06.587 回答
11

使用ack2,您似乎无法使用holygeek 的解决方案。

这是我使用-vand的方法-x

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

更一般地说,'test'可以是要排除的目录的正则表达式

于 2013-09-20T13:06:34.970 回答
5

为了方便使用 1.96 之前版本的 ack 的人(比如我),您可以使用 regex 环顾四周来执行此操作。这是一个例子:

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

这将递归地搜索text-pattern所有Java文件(从 .)中没有单词testtarget路径中的所有文件。

于 2012-08-20T21:58:16.063 回答
5

在最新版本的 ack 中,您可以将正则表达式与--ignore-dir.

这个线程

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

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

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

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

例如,您无法匹配类似的路径".*/docs/generated/.*"

为此,请参阅GitHub 问题 291

2020 年更新:看起来现在已移至 ack3(github 问题)。

于 2017-03-15T18:19:03.640 回答