Mengapa grep tidak mengabaikan file biner secara default?


94

Manual untuk grepmenggambarkan -Ibendera sebagai berikut:

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

Ia juga mengatakan ini tentang file biner:

 --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.

Saya tidak bisa memikirkan skenario di mana saya akan peduli tentang kecocokan dalam file biner. Jika skenario seperti itu ada, pastilah itu pengecualian dan bukan norma. Mengapa tidak grepmengabaikan file biner secara default daripada mengharuskan pengaturan flag ini untuk melakukannya?


4
Anda dapat mengatur variabel GREP_OPTIONSke pengaturan pilihan Anda, maka Anda tidak harus menggunakan banyak saklar baris perintah.
Marco

2
Catatan untuk perintah lain yang tidak mendukung variabel seperti itu: Anda dapat mengatur opsi default dengan mendefinisikan alias di .(ba|z|foo)shrc': alias Anda grep = "grep -I" `.
Erik

1
Ini sebenarnya bisa sangat berguna. Sebagai contoh, saya sedang mencari versi kesatuan proyek, dan tidak dapat mengingat file mana yang disimpan. Saya mencari format versi, dan muncul dengan beberapa file biner yang cocok. Ternyata itu seperti pra-versi 5, versi hanya hadir dalam file biner, jadi tanpa kecocokan biner, saya mungkin melewatkannya.
Svend Hansen

FYI Ada alat ack yang agak "lebih baik daripada grep". Ack tidak mencari file biner. Di Debian, itu datang dengan nama "ack-grep".
teika kazura

Jawaban:


91

Tidak semua yang dianggap grep adalah file biner, sebenarnya adalah file biner. misalnya log boneka memiliki kode warna ansi di dalamnya, yang membuat grep berpikir mereka biner. Saya masih ingin mencari mereka jika saya melihat / var / log.


4
Hal yang sama berlaku untuk file PDF juga.
Joseph R.

12
+ secara historis grep TIDAK bisa melakukan itu, jadi untuk kompatibilitas saja, default harus mencakup semua.
Olivier Dulac

2
@OlivierDulac masuk akal, jika tidak mengabaikan file biner harus menjadi default.
Dagang

5

grepKemampuan untuk mencari file biner juga berguna ketika saya sedang menyusun program dan linker ( ld) mengeluh tentang beberapa fungsi yang tidak ditemukan. Saya dapat menggunakan perintah seperti

grep function_name / lib / lib *

untuk menemukan perpustakaan yang memuatnya. (Perpustakaan adalah file biner.)


Dalam hal ini, Anda lebih suka menggunakan grep -l function_name /lib/lib*atau nm -Do /lib/lib* | grep function_nameatau ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_namesekalipun.
Stéphane Chazelas

Ya, grep some_function /lib/*lebih pendek dan biasanya memberikan jawaban yang benar - nama perpustakaan yang saya cari. Tapi ya, terkadang pendekatan yang lebih canggih seperti yang Anda butuhkan juga.
Daniel Frużyński
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.