jarでクラス名を検索する

jarでクラス名を検索する

このコマンドを使用して、* .jarファイルからJavaクラスを検索し、これらのクラスを含むjarの名前のみを取得します。

grep -ral --include=*.jar SignonEJB .

出力からクラス名をどのように取得できますか?

ベストアンサー1

ファイル名のみがリストされていること-lを示すには、このオプションを渡します。grepこれはファイルの名前であり、.jar他のファイルは関連しません。

クラス名を出力するにはgrepそれを削除する必要があります-l。しかし、jarはバイナリファイルであり、行で構成されていないため、同じ「行」に他の多くのゴミが印刷されます。 (GNU grepを使用すると、-a「binary ... match」だけでなく、その出力を取得するには渡す必要があります。)

GNU grep を使用すると、クラス名全体を一致させて-o出力に渡すことができます。

grep -rao --include='*.jar' '[0-9A-Z_a-z]*SignonEJB[0-9A-Z_a-z]*' .

それともこのパッケージも欲しいなら

grep -rao --include='*.jar' '[$./0-9A-Z_a-z]*SignonEJB[0-9A-Z_a-z]*' .

strings別のアプローチは、まずファイルを実行して印刷可能な文字列を抽出することです。 (2つのコマンドは同じです。sedバージョンはブロックし\&てラップしますが、awkバージョンはすべての文字をサポートします。)

find . -name '*.jar' -exec sh -c 'strings "$0" | grep SignonEJB | sed "s&^&$0&"' {} \;
find . -name '*.jar' -exec sh -c 'strings "$0" | jar=$0 awk "/SignonEJB/ {print ENVIRON[\"jar\"] \":\" $0}"' {} \;

または(厳密に言えば、を使用するとgrep偽の肯定が発生する可能性が少なくても、より安定している場合)、unzipファイル名をリストしてフィルタリングすることを使用します。

find . -name '*.jar' -exec sh -c 'unzip -l -- "$0" | grep SignonEJB' {} \;

おすすめ記事