如何通过RegEx与ack忽略特定目录?ack:通过正则表达式排除搜索中的特定目录
我可以使用--ignore-dir
选项,但这并不允许我指定RegEx。我希望能够忽略任何目录,其名称中有test
或tests
或更复杂的模式。
我也通过
ack -G '(?<!test)' pattern
试图负回顾后,但这不起作用。它不排除test
目录。
如何通过RegEx与ack忽略特定目录?ack:通过正则表达式排除搜索中的特定目录
我可以使用--ignore-dir
选项,但这并不允许我指定RegEx。我希望能够忽略任何目录,其名称中有test
或tests
或更复杂的模式。
我也通过
ack -G '(?<!test)' pattern
试图负回顾后,但这不起作用。它不排除test
目录。
使用无证选项 “--invert文件匹配”(我的系统上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.96版本的ack(像我一样),你可以使用正则表达式来查看。这里有一个例子:
ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
它会搜索所有Java
文件text-pattern
递归没有的话在他们的路径test
或target
(从)。
这个结构是什么?^((!!(test | target))。)* $'是什么意思? – Scit 2013-11-12 09:55:54
随着ACK2,似乎you can't use holygeek's solution.
这里是我如何使用-v
和-x
做到这一点:
ack -v -g 'test' | ack -x pattern
更一般地,'test'
可以一个正则表达式显示目录排除
确实对于ack2,这是你想要的。谢谢! – igniteflow 2015-02-23 13:52:37
在最近版本的ack,你可以使用正则表达式与--ignore-dir
。
是的,在我们2.15_01补充说:
- ACK现在支持 - 忽略DIR =匹配:....谢谢,艾琳Nemui! (GitHub的票#42)
GitHub的链接:https://github.com/petdance/ack2/issues/42
可悲的是,我认为这仅支持匹配的基本目录名,而不是完整路径。
例如,你不能匹配像".*/docs/generated/.*"
这样的路径。
对此,请参阅(仍然打开)GitHub issue 291。
太棒了 - 谢谢!在我看的手册页中没有任何关于此的内容,但它起作用。 – AmigoNico 2013-07-03 23:21:09