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.