2011-12-29 38 views
23

如何通過RegEx與ack忽略特定目錄?ack:通過正則表達式排除搜索中的特定目錄

我可以使用--ignore-dir選項,但這並不允許我指定RegEx。我希望能夠忽略任何目錄,其名稱中有testtests或更復雜的模式。

我也通過

ack -G '(?<!test)' pattern 

試圖負回顧後,但這不起作用。它不排除test目錄。

回答

20

使用無證選項 「--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中。

+0

太棒了 - 謝謝!在我看的手冊頁中沒有任何關於此的內容,但它起作用。 – AmigoNico 2013-07-03 23:21:09

5

爲了讓人們使用前1.96版本的ack(像我一樣),你可以使用正則表達式來查看。這裏有一個例子:

ack --java 'text-pattern' -G '^((?!(test|target)).)*$' 

它會搜索所有Java文件text-pattern遞歸沒有的話在他們的路徑testtarget(從)。

+0

這個結構是什麼?^((!!(test | target))。)* $'是什麼意思? – Scit 2013-11-12 09:55:54

10

隨着ACK2,似乎you can't use holygeek's solution.

這裏是我如何使用-v-x做到這一點:

ack -v -g 'test' | ack -x pattern 

更一般地,'test'可以一個正則表達式顯示目錄排除

+1

確實對於ack2,這是你想要的。謝謝! – igniteflow 2015-02-23 13:52:37

2

在最近版本的ack,你可以使用正則表達式與--ignore-dir

this thread

是的,在我們2.15_01補充說:

  • ACK現在支持 - 忽略DIR =匹配:....謝謝,艾琳Nemui! (GitHub的票#42)

GitHub的鏈接:https://github.com/petdance/ack2/issues/42

可悲的是,我認爲這僅支持匹配的基本目錄名,而不是完整路徑。

例如,你不能匹配像".*/docs/generated/.*"這樣的路徑。

對此,請參閱(仍然打開)GitHub issue 291