grepを使用して見つかった文字列はテキストを出力しません。

grepを使用して見つかった文字列はテキストを出力しません。

(Windows)実行可能ファイルで特定の文字列を探しています。

最初は

grep -a string file

バイナリファイルをテキストファイルとして扱うからです。問題は、きちんとした出力がなく、改行文字が偶然に発生することです(正しいバイトが順番に来るとき)。

だから文字列を使うべきだと思いました。

strings file | grep -i string

驚くべきことに、 "strings" は "grep -a" を使用して見つかった文字列を見つけることができません。しかし、「文字列」の利点は、新しい行で見つかったすべての項目を出力できることです。

どうすれば両方の世界の利点を得ることができますか?これは、実際にすべてを探して、私が見つけたものの合理的な結果を得たいことを意味します。

ベストアンサー1

strings文字列と同じパターンが見つからない場合は、strings4文字以上のパターンを見つけると発生する可能性があります。そして印刷できない文字が続きます。man stringsGNUからstrings

For each file given, GNU strings prints the printable character
sequences that are at least 4 characters long (or the number given
with the options below) and are followed by an unprintable character.

また、stringsデフォルトでは、ターゲットファイルの初期化およびロード部分のみがチェックされるため、出力される行数がさらに減ります。

この動作を変更するために試すことができるオプションは次の-aとおりです。-n

strings -n 1 -a file | grep -i string

これにより、より多くの文字列が提供され、おそらく期待したものになります。

私の実行可能ファイルの出力の違いpython

$ strings $(which python) | wc
  31923   68075  474068
$ strings -n 1 $(which python) | wc
 501231  531837 1541204
$ strings -n 1 -a $(which python) | wc
 501398  531995 1541762

おすすめ記事