如何通過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