İkili dosyaları greplemek için eşdeğer komut


24

Bir sürü ikili dosyam var ve bu ikili dosyaların içinde bulmak istediğim stringler olduğunu biliyorum.

Bir yapmak istiyorum:

grep -lir "the string I am looking for"

ve bu dizeyi içeren ancak grep -lirgörünüşe göre bu dosyalarla çalışmayan belli bir dizindeki tüm ikili dosyaların listesini alın .

Terminalden bu tür bir arama yapabilecek bir komut var mı?

Yanıtlar:


24

İle GNU grep , kullanabileceğiniz -a o metin dosyaları olarak ikili dosyaları davranır hale getirme seçeneğine:

grep -ali -- string file

Grep sürümünüz desteklemiyorsa -a, yerine ack kullanabilirsiniz . Ack 1.x ile, -aack 2.x ile bir seçenek eklemeniz gerekir , çünkü arama varsayılan olarak metin olmayan bir dosya içerdiğinde (yalnızca herhangi bir dosya belirtmediğinizde metin olmayan dosyayı dikkate almazsınız).


ackKendi tarifini yanlış mı okuyorum ? (kılavuzda) "ack 2.x, açıkça göz ardı edilmeyen her normal, ikili olmayan dosyayı arayacaktır. [by blah blah]" Bu yüzden ack 2.x, içeriğe bakılırsa hala bir dosyayı okumayı bırakmalı gibi görünüyor. ikili.
Peter Cordes

1
@PeterCordes: Bu, hiçbir dosya seçilmediğinde meydana geldi. Deneyin ack grep /bin/grepve sonucu alacaksınız. Kafamı karıştırmamak için cevabımı güncelledim.
cuonglm

1
Dizeleri ikili sisteminizden almak için dizeler komutunu kullanmayı deneyin.
Uwe Burger

23

Komut stringstüm ascii verilerini bir dosyadan çıkarır, eğer grepçıktısını alırsanız verilerinizi arayabilirsiniz:

strings <filename> | grep "search text"

Bu kabul edilen cevap olmalı. Bu ikili bu görev için uygun.
Vladislavs Dovgalecs

5
@xeon: Kullanımı her zaman iyi değildir strings, daha fazla ayrıntı için burayı okuyun .
cuonglm

1
Amaç hangi ikililerin dizgiyi içerdiğini belirlemek strings -folduğundan, daha uygun olacaktır.
jamesdlin

Bu daha iyi bir cevap.
Xofo

9

Sorunuz bir model içeren ikili dosyaları bulmakla ilgili (ve biz zaten çok iyi cevaplarımız var!). Tamamlayıcı olayları almak isteyebiliriz.

Sık sık kullanırım

grep -aPo '.{0,20}pattern.{0,20}'  binfile

20 karakterli bir çevre bağlamı elde etmek için.

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.