如何使用ack通过RegEx忽略特定目录?
我可以使用--ignore-dir
选项,但这不允许我指定RegEx。我希望能够忽略任何目录,其名称中包含test
或tests
或更复杂的模式。
我也通过
尝试了负面的背后隐藏ack -G '(?<!test)' pattern
但这不起作用。它不排除test
目录。
答案 0 :(得分:21)
使用未记录的选项“--invert-file-match”(我系统上的ack版本: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没有记录。
答案 1 :(得分:10)
使用ack2,似乎you can't use holygeek's solution.
以下是我使用-v
和-x
:
ack -v -g 'test' | ack -x pattern
更一般地说,'test'
可以是dirs排除
答案 2 :(得分:5)
为了使用1.96之前版本的ack(像我一样)的人们的利益,你可以使用正则表达式环顾四周来做到这一点。这是一个例子:
ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
这会在所有text-pattern
个文件中以递归方式(来自。)搜索其路径中没有Java
或test
字样的文件。
答案 3 :(得分:2)
在最近的ack版本中,您可以使用--ignore-dir
的正则表达式。
来自this thread:
是的,在2.15_01中我们添加了:
- ack现在支持--ignore-dir = match:....谢谢,Ailin Nemui! (GitHub门票#42)
GitHub链接:https://github.com/petdance/ack2/issues/42
可悲的是,我认为这只支持匹配基目录名,而不是完整路径。
例如,您无法将".*/docs/generated/.*"
之类的路径与之匹配。
为此,请参阅(仍然打开)GitHub issue 291。