私はこのプロジェクトがどのバージョンの休止状態に依存しているかを調べようとしています(私の質問に直交しています)。
私たちはいくつかのサブプロジェクトを含む親プロジェクトを持っており、これが1つ以上のプロジェクトにあることを知っていますpom.xml
。問題は、一致を印刷するとその行だけが表示され、pom.xml
I want to Know which Child Projectで見つかったことですpom.xml
。
相対パスを印刷するにはどうすればよいですかgrep
? (絶対パスも機能しますが、表示が悪いです。)これが可能でない場合は、他の提案を歓迎します。
$ grep -rI -3 org.hibernate pom.xml
答え1
find、xargs、およびgrepを一緒に使用することをお勧めします。
cd top-dir
find . -print -name 'pom.xml' -print0 | xargs -0 grep -l pattern
見つかったディレクトリの特殊文字が保護され、正しく処理されるように -print0/-0 オプションを入れました。
上記は、パターンと一致する最上位ディレクトリに基づいてファイル名をリストします。
答え2
grep --with-filename -rI -3 org.hibernate pom.xml
マニュアルページから:
-H, --with-filename
Print the file name for each match. This is the default when there is more than one file to
search.
答え3
globstar
別の解決策はパターンを使用することです。再帰グローバル、grep
-H
出力にファイル名を含むオプションと一緒に使用されます。
shopt -s globstar
grep -H org.hibernate **/pom.xml
再帰grep
(-R
)とは異なり、この-H
オプションにはこの方法を使用するときに出力にファイルパスが含まれます。
ヒント:再帰を永久に許可するには、ワイルドカードを追加すると便利shopt -s globstar
です.bashrc
。
答え4
次のコマンドを使用します。
cat */demo.txt | grep -Rli 'demo'
このコマンドはファイルのパスを返します。