私はUbuntuを使用していて、cat .bash_history | grep git
と入力すると、返されました
バイナリファイル(標準入力)が一致します
私のbash_history
が存在し、その中に多くの行がありますgit
で始まります。
このエラーが表示される原因とその修正方法を教えてください。
コメント
回答
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
-a
はgrep
を作成しますファイルをバイナリとして処理します。 -
-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以外のシステムに関する提案があります。
file .bash_history
(file ~/.bash_history
)の出力は何ですか?.bash_history: data