2011-10-21 9 views
2

私はコードベースを検索するのにACKを使用しています。素晴らしいツールです。しかし、それは(私の意見では)1つの重要な制限があります - それは正規表現の複数行の一致を許可しません。ACKをフィルタとして使用する

この制限を克服するために、特定の式を含む一連のファイルをフィルタ処理し、2番目の式を探してフィルタリングしたいと思います(両方の式が同じ行にない可能性が高いことが条件です)。 、.cvsのDIRSを無視して、

ack -l --type=java "(List|Collection|Map|Set)" | ack --type=java "String" 

そして、私はjavaファイルに私の検索を制限したいので、私はむしろ、grepを使用していないと思います。私は(それは何も返しません)なし成功し、次のコマンドを実行してみました.svn dirsなど(何かackがデフォルト)何かアイデア?

答えて

4

現在のコマンドラインでは、一致するファイルのリストを検査する別のファイルセットとして使用せずに、ファイルのリストでackを実行しています。つまり、それはあなたが第二のACK呼び出しは実行可能なファイルのセットとして最初のコマンドからの出力を処理するために使用するツール

ack -l --type=java "(List|Collection|Map|Set)" > files 
ack "String" files 

xargsをされたことと同じことです。

ack --print0 -l --type=java "(List|Collection|Map|Set)" | xargs -0 ack "String" 
--print0

はxargsのは、(場合、それに奇数の文字がある)正しいファイル名を取得することを保証するために、ヌル文字でファイル名を分離します。 xargsへのフラグ-0は、ファイル名がヌル区切りになることを期待しています。

関連する問題