grep mengembalikan "File biner (input standar) cocok" ketika mencoba menemukan pola string dalam file


71

Saya di Ubuntu dan saya mengetik cat .bash_history | grep gitdan kembali

File biner (input standar) cocok

Saya bash_historymemang ada dan ada banyak baris di dalamnya yang dimulai dengan git.

Apa yang menyebabkan tampilan kesalahan ini dan bagaimana cara memperbaikinya?


Apa output dari file .bash_history( file ~/.bash_history)?
heemayl

outputnya adalah.bash_history: data
answerSeeker

untuk beberapa alasan ini hanya terjadi dengan log apache saya. terima kasih atas q & a
billynoah

Jawaban:


11

Agaknya file .bash_historydimulai dengan data non-teks, karenanya grepmemperlakukan file sebagai biner. Ini dikonfirmasi oleh file .bash_historyoutput:

.bash_history: data 

Anda dapat membaca beberapa byte dari awal untuk memiliki tampilan yang sesuai:

head -c1K .bash_history 

Di sini saya membaca 1 KiB pertama.

Anda dapat mengirim pipa STDOUT ke hexdump/ odatau serupa.


Sebagai catatan tambahan, grepgunakan nama file sebagai argumen, jadi cattidak berguna di sini; kerjakan saja:

grep git .bash_history

Saya masih tidak yakin bagaimana menyelesaikan masalah grep, head -c1k .bash_historybaca 38 baris pertama file .bash_history saya. Semuanya dapat dibaca
answerSeeker

2
@TatakaiWasumi Apa hasilnya grep -a git .bash_history?
heemayl

1
Itu berhasil! Saya mendapatkan semua yang saya inginkan darinya. Apa yang -aharus dilakukan
answerSeeker

6
@TatakaiWasumi -amenjadikan grepfile ini sebagai biner.
heemayl

3
-amembuat grepproses file biner seolah-olah itu teks.
lashgar

128

Anda bisa menggunakannya grep -a 'pattern'.

dari halaman manual grep :

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

Ini telah membantu saya ketika menggunakan -zbendera untuk mencocokkan beberapa baris.
stragu

Jawaban ini harus menjadi yang terbaik untuk pertanyaan ini.
Michael Pacheco

Ya jawaban ini jauh lebih cocok!
Daywalker

3

Saya telah melihat pertanyaan ini hari ini, karena saya mempunyai masalah yang sama ketika saya ingin mengerti .bash_history. (Catatan Kecil: Saya mengubah nama riwayat saya, sehingga yang baru dibuat. Sejarah baru ini tidak diperlakukan sebagai biner.)

Dalam jawaban @heemayls dinyatakan, itu grepmengambil nama file dan cattidak berguna. Ini tidak sepenuhnya benar. Dari grephalaman manual s:

Jika tidak ada file yang ditentukan, atau jika file "-" diberikan, grep mencari input standar.

Jadi Anda bisa menggunakan catdan mengirimnya ke pipa grep. Namun ini bukan memecahkan masalah yang .bash_historydiperlakukan sebagai biner. Satu-satunya hal yang benar adalah menggunakan grep -a(Seperti dalam jawaban dari @AK_) apakah Anda grepsejarah langsung atau dengan catdan pipa.


cat .bash_history | grep -a git

atau

grep -a git .bash_history


Terima kasih! Bekerja dengan baik untuk saya
Michael Pacheco
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.