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