grep, dosyada bir dize deseni bulmaya çalışırken "İkili dosya (standart giriş) eşleşiyor" ifadesini döndürüyor


71

Ubuntu'dayım ve yazdım cat .bash_history | grep gitve geri döndü

İkili dosya (standart giriş) eşleşir

Benim bash_historyvarlığım var ve onunla başlayan birçok çizgi var git.

Bu hatayı görüntülemeye ne sebep oldu ve nasıl düzeltebilirim?


file .bash_history( file ~/.bash_history) Çıktısı nedir?
heemayl

çıktı.bash_history: data
answerSeeker

nedense bu sadece apache günlüklerimle oluyordu. q & a
billynoah

Yanıtlar:


11

Muhtemelen dosya .bash_history, metin olmayan verilerle başlar, bu nedenle grepdosyayı ikili olarak değerlendirir. Bu file .bash_historyçıkış tarafından onaylanır :

.bash_history: data 

Uyumlu bir görünüme sahip olmak için başlangıçtan itibaren birkaç byte okuyabilirsiniz:

head -c1K .bash_history 

İşte ilk 1 KiB okuyorum.

STDOUT'u hexdump/ odveya benzerlerine bağlayabilirsiniz .


Bir yan not olarak, grepdosya isimlerini argüman olarak alır, catburada da işe yaramaz; sadece yap:

grep git .bash_history

Grep sorununu nasıl çözeceğimi hala bilmiyorum head -c1k .bash_history. .Ash_history dosyamın ilk 38 satırını okuyun. Her şey okunaklıydı
answerSeeker

2
@ TatakaiWasumi Çıktısı grep -a git .bash_historynedir?
heemayl

1
İşe yaradı! Ondan istediğim her şeyi aldım. Ne yapar -a?
CevapSeeker

6
@TatakaiWasumi -ayapar grepikili dosyayı tedavi etmek.
heemayl

3
-agrepişlemi metinmiş gibi ikili bir dosya haline getirir.
kirpik

128

Kullanabilirsiniz grep -a 'pattern'.

dan man grep sayfa:

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

-zBayrak birkaç satır boyunca eşleştirmek için kullanırken bu bana yardımcı oldu .
Stragu

Bu cevap, bu soru için en iyisi olmalıdır.
Michael Pacheco,

Evet bu cevap daha uygun!
Daywalker,

3

Bugün bu soruyu gördüm, çünkü aynı şeyi yapmak istedim .bash_history. (Küçük Not: Tarihimi yeniden adlandırdım, böylece yeni bir tane oluşturuldu. Bu yeni tarih ikili olarak değerlendirilmedi.)

@Heemayls cevabında grepdosya isimlerinin alındığı ve catişe yaramayacağı belirtildi. Bu tamamen doğru değil. Gönderen grepErkeğin sayfa:

Dosya belirtilmemişse veya “-” dosyası verilmişse, grep standart girişi arar.

Böylece onu kullanabilir catve kullanabilirsiniz grep. Ancak bu .bash_historyikili olarak ele alınan sorunu çözmez. Tek doğru şey, doğrudan veya birlikte bir boru grep -aolup olmadığını (@AK_'nin cevabında olduğu gibi) kullanmaktır .grepcat


cat .bash_history | grep -a git

veya

grep -a git .bash_history


Teşekkür ederim! Benim için iyi çalışıyor
Michael Pacheco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.