ackを使用して RegEx 経由で特定のディレクトリを無視するにはどうすればよいですか?
オプションを使用でき--ignore-dirますが、正規表現を指定できません。test名前に単語またはtestsより複雑なパターンが含まれているディレクトリを無視できるようにしたい。
私はまた、否定的な後読みを試みました
ack -G '(?<!test)' pattern
しかし、これは機能しません。testディレクトリは除外されません。
文書化されていないオプション「--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 には記載されていません。
ack2 では、holigeek のソリューションを使用できないようです。
-vandを使用してそれを行う方法は次の-xとおりです。
ack -v -g 'test' | ack -x pattern
より一般的には、'test'除外するディレクトリの正規表現にすることができます
(私のように) 1.96 より前のバージョンの ack を使用している人々のために、正規表現のルックアラウンドを使用してこれを行うことができます。次に例を示します。
ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
text-patternこれにより、すべてのファイルが (. から) 再帰的に検索されJavaますが、その単語testまたはtargetそのパスにはありません。