文字列 - ファイルのバージョンを再帰的に抽出します。

文字列 - ファイルのバージョンを再帰的に抽出します。

私はstrings抽出を使用し、ディレクトリ間のファイルバージョンを比較しました。

これを再帰的に実行することはできないようです。

各ファイルに使用する方法は次のとおりです。

strings -e l FILENAME.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | cut -d ' ' -f 2

ファイル名を削除して*に変更すると機能します。ただし、ファイル名ではなくファイルのバージョンのみがわかります。 -F を含めると、文字列のファイル名が提供されます。

ただし、ファイル名とバージョン番号のみを収集するようにSed / Grepをフォーマットする方法は理解できません。

答え1

で終わる行を印刷したいように聞こえるFileVersionので、問題になります。

strings -f -e l -- *.exe | sed -n '/FileVersion$/{n;p;}'

答え2

次のことができます。

 strings -e l -f FILENAME.exe | sed -n -e :a -e '/FileVersion$/,/.*/{/FileVersion$/d;/.*/p}'

これにより、sedがpで指示した以外の「-n」行を印刷しないようになります。次に、FileVersionで終わる行と次のパターンを見つけるように指示します。終了パターンは.*なので、次の行と一致します:).次に、FileVersion 行を削除し、バージョンを含める残りの部分を印刷するように指示します。 :)

答え3

これはcutとsedの使い方を正しく理解していません。

裏地を少し調整します。

strings -f -e l *.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | sed 's/.*FileVersion//'

したがって、文字列はファイル名に-fを使用し、必要なファイル情報に-eを使用します。

ファイルバージョンを削除して維持するためのsed

次に、grepを介して画面上でその情報を見つけます。

最後の sed は Fileversion の前にコンテンツを削除します。 (これは正しい方法ではありません。sedのパターンを理解するのは複雑です。)

sed 's/.*FileVersion//'

誰もがsedの正しい形式を投稿したい場合は、喜んで更新します。残念ながら、sedのパターンと理解は完全には理解されていません。

関連情報