grepは、ファイル

文字列パターンを検索しようとすると、“バイナリファイル(標準入力)の一致”を返します。 div class = “question”>

私はUbuntuを使用していて、cat .bash_history | grep gitと入力すると、返されました

バイナリファイル(標準入力)が一致します

私のbash_historyが存在し、その中に多くの行がありますgitで始まります。

このエラーが表示される原因とその修正方法を教えてください。

コメント

  • file .bash_historyfile ~/.bash_history)の出力は何ですか?
  • 出力は.bash_history: data
  • 何らかの理由で、これは私のapacheログで発生していました。q& a
  • 非常に密接に関連している: unix.stackexchange.com/q/19907/5510

回答

Presuma blyファイル.bash_historyは非テキストデータで始まるため、grepはファイルをバイナリとして扱います。これは、file .bash_historyの出力によって確認されます。

.bash_history: data 

最初から数バイトを読み取って、適合させることができます。ビュー:

head -c1K .bash_history 

ここで最初の1KiBを読んでいます。

STDOUTをhexdump / odまたは同様のもの。


補足として、grepはfilename( s)引数として、catはここでは役に立ちません。これを試してください:

grep git .bash_history 

コメント

  • I ' grepの問題を解決する方法がまだわからない場合は、head -c1k .bash_history .bash_historyファイルの最初の38行を読んでください。すべてが読み取り可能でした
  • @TatakaiWasumi grep -a git .bash_historyの出力は何ですか?
  • うまくいきました!私はそれから欲しいものすべてを手に入れました。 -aは何をしますか?
  • @TatakaiWasumi -agrepを作成しますファイルをバイナリとして処理します。
  • -a grepにバイナリファイルをテキストのように処理させます。

回答

grep -a "pattern"を使用できます。

man grep ページから:

-a、-text
バイナリファイルをテキストであるかのように処理します。これは、 -binary-files = text オプションと同等です。

コメント

  • これは、-zフラグを使用して複数の行を照合するときに役立ちました。
  • 問題なく動作しましたが、ファイルがバイナリファイルではないため'奇妙です。 [grid @ serverdg2 trace] $ file listener.log listener.log:data

回答

.bash_historyをgrepしたいときに同じ問題が発生します。 (注意:履歴の名前を変更したため、新しい履歴が作成されました。この新しい履歴はバイナリとして扱われませんでした。)

@heemaylsの回答には、はファイル名を取り、catは役に立ちません。これは完全に正しいというわけではない。 grepのマニュアルページから:

ファイルが指定されていない場合、またはファイル「-」が与えられた場合、grepは標準入力を検索します。

したがって、catを使用してgrep。しかし、これは.bash_historyがバイナリとして扱われるという問題を解決するものではない。唯一正しいことは、履歴を直接grepするか、iv idを使用するかにかかわらず、grep -a(@ AK_からの回答のように)を使用することです。 = “df40deca6b”>

とパイプ。


cat .bash_history | grep -a git 

または

grep -a git .bash_history 

回答

エラーはファイル内のデータがバイナリであることが原因です。stringsコマンドを使用して、人間が読める形式を確認できます(つまり、 strings)通常はgrep

strings data | grep -i whatever

コメント

  • これは、質問の最初の部分、つまり"の原因には対応していません。問題"。

回答

これが原因である可能性がありますbash履歴のnullバイト。ヌル文字を含む行を削除することでこの問題を解決できるかもしれません。 grepのPerl-regexpモードを使用してそれらを確認できます:

grep -Pa "\x00" .bash_history 

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です