如何通过带有ack的 RegEx忽略特定目录?
我可以使用该--ignore-dir选项,但这不允许我指定RegEx.我希望能够忽略任何目录,里面有句话test或tests在其名称或更复杂的图案.
我也试过了一个负面的lookbehind via
ack -G '(?<!test)' pattern
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它不排除test目录.
hol*_*eek 21
使用未记录的选项"--invert-file-match"(我系统上的ack版本:1.96):
$ ack pattern -G 'test|tests' --invert-file-match
Run Code Online (Sandbox Code Playgroud)
好吧,它有点记录:
$ 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.
Run Code Online (Sandbox Code Playgroud)
它的perldoc没有记录.
laj*_*rre 11
使用ack2,似乎你无法使用holygeek的解决方案.
这是我如何使用-v和-x:
ack -v -g 'test' | ack -x pattern
Run Code Online (Sandbox Code Playgroud)
更一般地说,'test'可以是dirs排除的正则表达式
为了使用1.96之前版本的ack(像我一样)的人们的利益,你可以使用正则表达式环顾四周来做到这一点.这是一个例子:
ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
Run Code Online (Sandbox Code Playgroud)
这将以递归方式(来自.)搜索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 问题)。