Grep neden ikili dosyaları varsayılan olarak yoksaymıyor?


94

Manpage grep, -Ibayrağı şu şekilde tarif eder:

-I      Ignore binary files.  This option is equivalent to 
        --binary-file=without-match option.

Ayrıca ikili dosyalar hakkında da şöyle diyor:

 --binary-files=value Controls searching and printing of binary files.
         Options are binary, the default: search binary files but do not print
         them; without-match: do not search binary files; and text: treat all
         files as text.

İkili dosyalardaki eşleşmeleri önemseyeceğim bir senaryo düşünemiyorum. Eğer böyle bir senaryo varsa, kesinlikle normdan ziyade istisna olmalı. grepBu bayrağın ayarlanması gerekmektense , neden ikili dosyaları varsayılan olarak yoksaymıyorsunuz?


4
Değişkeni GREP_OPTIONStercih ettiğiniz ayarlara getirebilirsiniz, o zaman o kadar komut satırı anahtarını kullanmak zorunda kalmazsınız.
Marco

2
Böyle bir değişkeni desteklemeyen diğer komutlar için bir not: Takma adınızdaki bir diğer adı tanımlayarak varsayılan seçenekleri ayarlayabilirsiniz. .(ba|z|foo)shrc': Grep = "grep -I" `.
Erik

1
Bu aslında çok faydalı olabilir. Örneğin, bir projenin birlik sürümünü arıyordum ve hangi dosyanın içinde tutulduğunu hatırlayamadım. Sürümün biçimini aradım ve eşleşen bazı ikili dosyalar ile karşılaştı. Sürüm 5 öncesi olduğu gibi, sürüm sadece ikili bir dosyadaydı, bu yüzden ikili maç olmadan kaçırmış olabilirdim.
Svend Hansen

Bilginize bir araç var ack "grep daha iyi" türüdür. Ack ikili dosyaları aramaz. Debian'da "ack-grep" adı altında geliyor.
teika kazura

Yanıtlar:


91

Grep'in düşündüğü her şey bir ikili dosya değildir, aslında bir ikili dosyadır. Örneğin, kuklanın kütüklerinde ansi renk kodlaması vardır, bu da grep'in ikili olduğunu düşündürür. Yine de / var / log ile uğraşıyorsam hala onları aramak istiyorum.


4
Aynı PDF dosyaları için de geçerli.
Joseph R.

12
+ tarihsel olarak grep bunu yapamadı, bu nedenle yalnızca uyumluluk için varsayılan her şey dahil olmak zorunda.
Olivier Dulac

2
@OlivierDulac mantıklı, aksi takdirde ikili dosyaları görmezden varsayılan olmalıdır.
Dagang

5

grepBir programı derlerken ikili dosyaları arama yeteneği de faydalıdır ve linker ( ld) bulunamayan bazı fonksiyonlardan şikayetçidir. Gibi bir komut kullanabilirim

grep function_name / lib / lib *

içeren kütüphaneyi bulmak için. (Kütüphaneler ikili dosyalardır.)


Bu durumda, yerine kullanmayı tercih ediyorum grep -l function_name /lib/lib*ya nm -Do /lib/lib* | grep function_nameya ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_namegerçi.
Stéphane Chazelas

Eh, grep some_function /lib/*kısa ve genellikle doğru cevap verir - aradığım kütüphanenin adı. Fakat evet, bazen sizinkiler gibi daha sofistike bir yaklaşım da gerekli.
Daniel Frużyński
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.