27

ackを使用して RegEx 経由で特定のディレクトリを無視するにはどうすればよいですか?

オプションを使用でき--ignore-dirますが、正規表現を指定できません。test名前に単語またはtestsより複雑なパターンが含まれているディレクトリを無視できるようにしたい。

私はまた、否定的な後読みを試みました

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

しかし、これは機能しません。testディレクトリは除外されません。

4

4 に答える 4

22

文書化されていないオプション「--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 には記載されていません。

于 2011-12-29T16:31:06.587 に答える
11

ack2 では、holigeek のソリューションを使用できないようです。

-vandを使用してそれを行う方法は次の-xとおりです。

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

より一般的には、'test'除外するディレクトリの正規表現にすることができます

于 2013-09-20T13:06:34.970 に答える
5

(私のように) 1.96 より前のバージョンの ack を使用している人々のために、正規表現のルックアラウンドを使用してこれを行うことができます。次に例を示します。

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

text-patternこれにより、すべてのファイルが (. から) 再帰的に検索されJavaますが、その単語testまたはtargetそのパスにはありません。

于 2012-08-20T21:58:16.063 に答える