如何通过带有ack的 RegEx 忽略特定目录?
我可以使用该--ignore-dir选项,但这不允许我指定 RegEx。我希望能够忽略名称中包含单词或更复杂模式的任何test目录tests。
我还尝试了负面的回顾
ack -G '(?<!test)' pattern
但这不起作用。它不排除test目录。
使用未记录的选项“--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 中。
使用ack2,您似乎无法使用holygeek 的解决方案。
这是我使用-vand的方法-x:
ack -v -g 'test' | ack -x pattern
更一般地说,'test'可以是要排除的目录的正则表达式
为了方便使用 1.96 之前版本的 ack 的人(比如我),您可以使用 regex 环顾四周来执行此操作。这是一个例子:
ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
这将递归地搜索text-pattern所有Java文件(从 .)中没有单词test或target路径中的所有文件。
在最新版本的 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 问题)。