web-dev-qa-db-ja.com

grepは、再帰検索を実行するときに相対ファイルパスを出力します

プロジェクトがどのバージョンの休止状態に依存しているかを調べようとしています(これは私の質問と直交しています)。

いくつかのサブプロジェクトを持つ親プロジェクトがあり、これが1つ以上のpom.xmlで定義されていることを私は知っています。問題は、一致を出力するときに、その行だけがpom.xmlで見つかったことを示しているので、どのサブプロジェクトpom.xmlを知りたいのかということです。

grepを取得して相対パスを出力するにはどうすればよいですか(絶対でも機能しますが、きれいではありません)?それが不可能な場合は、別の提案を歓迎します。

$ grep -rI -3 org.hibernate pom.xml
4
xenoterracide

Find、xargs、grepを組み合わせて使用​​することをお勧めします。

 cd top-dir
 find . -print -name 'pom.xml' -print0 | xargs -0 grep -l pattern

-print0/-0オプションを入力して、見つかったディレクトリ内の特殊文字が保護され、適切に処理されるようにしました。

上記は、pattermに一致するtop-dirに関連するファイル名をリストします。

3
mdpc

別の解決策は、globstarパターン、つまり recursive globgrep-Hオプションと組み合わせて使用​​することです。ファイル名を出力に含めます。

shopt -s globstar
grep -H org.hibernate **/pom.xml

再帰的なgrep-R)とは異なり、このアプローチでは、-Hオプションは出力にファイルパスを含めます。

ヒント:再帰的なグロブを永続的に許可するには、shopt -s globstar.bashrcに追加すると便利な場合があります。

0
rustyx
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.
0
Dan Garthwaite