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

Regex 确认:通过正则表达式从搜索中排除特定目录,regex,ack,Regex,Ack,如何通过带有的正则表达式忽略特定目录 我可以使用--ignoredir选项,但这不允许我指定正则表达式。我希望能够忽略任何目录,其名称中包含单词test或tests或更复杂的模式 我还尝试了通过 ack -G '(?<!test)' pattern ack-G'(?使用未记录的选项”--反转文件匹配”(我的系统上的ack版本:1.96): 嗯,这是有记录的: $ ack --help|grep invert -v, --invert-match Invert match: sele

如何通过带有的正则表达式忽略特定目录

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

我还尝试了通过

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

ack-G'(?使用未记录的选项”--反转文件匹配”(我的系统上的ack版本:1.96):

嗯,这是有记录的:

$ 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中。

为了使用ack 1.96之前版本的用户的利益(如我),您可以使用regex look-around来执行此操作。以下是一个示例:

ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
这将在路径中没有单词
test
target
的所有
Java
文件中递归搜索
文本模式

下面是我如何使用
-v
-x

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

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

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

发件人:

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

  • ack现在支持--ignore dir=match:…谢谢,Ailin Nemui!(GitHub票证#42)
GitHub链接:

遗憾的是,我认为这只支持匹配基本目录名,而不支持匹配完整路径

例如,您不能将类似
“*/docs/generated/*”
的路径与其匹配

为此,请参阅


2020年更新:这看起来像是现在移到了ack3()。

太棒了--谢谢!在我看到的手册页中也没有关于这方面的内容,但它是有效的。这种构造“^((?!(测试目标)))*$”意味着什么?事实上,对于ack2来说,这就是你想要的。谢谢!
ack -v -g 'test' | ack -x pattern