grepは、ファイル内の文字列パターンを見つけようとすると、「バイナリファイル(標準入力)一致」を返します。

grepは、ファイル内の文字列パターンを見つけようとすると、「バイナリファイル(標準入力)一致」を返します。

Ubuntuで私は入力して戻っcat .bash_history | grep gitてきました。

バイナリファイル(標準入力)一致

Myがbash_history存在し、で終わる行がたくさんありますgit

このエラーが表示される原因と回避策は何ですか?

答え1

あなたはそれを使用することができますgrep -a 'pattern'

~から人々はgrepページ:

-a、--text
テキストなどのバイナリファイルを処理するには:--バイナリ=テキストオプション。

答え2

おそらくファイルは.bash_historyテキストではなくデータで始まるので、grepファイルはバイナリファイルとして扱われます。出力は次のことを確認しますfile .bash_history

.bash_history: data 

一貫したビューを得るために、最初から数バイトを読み取ることができます。

head -c1K .bash_history 

まずここで1KiBを読んでみましょう。

hexdumpSTDOUTを/または同様にパイプすることができますod


ちなみに、grepファイル名はパラメータとして使用されるため、catここでは役に立ちません。

grep git .bash_history

答え3

これは、bash レコードの null バイトが原因で発生する可能性があります。 NULL文字を含む行を削除すると、問題が解決する可能性があります。 grepのPerl-regexpモードを使用して確認できます。

grep -Pa '\x00' .bash_history

この投稿UNIX以外のシステムに関する提案があります。

答え4

エラーは、ファイルのデータがバイナリであるために発生します。 stringsコマンドを使用すると、strings一般的に使用される検索で人が読める部分を表示できます。grep

strings data | grep -i whatever

関連情報