Perintah Setara untuk grep file biner


24

Saya memiliki banyak binari dan saya tahu bahwa di dalam binari ini ada string yang ingin saya temukan.

Saya ingin melakukan:

grep -lir "the string I am looking for"

dan dapatkan daftar semua binari di dalam direktori tertentu yang berisi string itu tetapi grep -lirtampaknya tidak bekerja dengan file-file ini.

Apakah ada perintah yang dapat melakukan pencarian seperti ini dari terminal?

Jawaban:


24

Dengan GNU grep , Anda dapat menggunakan opsi -a untuk membuatnya memperlakukan file biner sebagai file teks:

grep -ali -- string file

Jika versi grep Anda tidak mendukung -a, Anda dapat menggunakan ack sebagai gantinya. Dengan ack 1.x, Anda harus menyertakan -aopsi, dengan ack 2.x, Anda tidak perlu, karena ketika mencari menyertakan file non-teks secara default (hanya mengabaikan file non-teks ketika Anda tidak menentukan file apa pun).


Apakah saya salah membaca ackuraian diri? (dalam manual) "ack 2.x akan mencari melalui setiap file biasa, non-biner yang tidak secara eksplisit diabaikan [oleh bla bla]" Jadi kedengarannya seperti ack 2.x masih harus berhenti membaca file lebih awal jika isinya terlihat biner.
Peter Cordes

1
@PeterCordes: Itu terjadi ketika tidak ada file yang dipilih. Coba ack grep /bin/grepdan Anda akan mendapatkan hasilnya. Saya memperbarui jawaban saya untuk mencegah kebingungan.
cuonglm

1
Coba gunakan perintah string untuk mendapatkan string dari biner Anda.
Uwe Burger

23

Perintah stringsakan mengekstrak semua data ascii dari file, jika Anda kemudian grephasilnya, Anda dapat mencari data Anda:

strings <filename> | grep "search text"

Ini harus menjadi jawaban yang diterima. Biner ini cocok untuk tugas ini.
Vladislavs Dovgalecs

5
@ xeon: Tidak selalu baik untuk digunakan strings, baca di sini untuk detail lebih lanjut.
cuonglm

1
Karena tujuannya adalah untuk menentukan biner mana yang berisi string, strings -fakan lebih tepat.
jamesdlin

Ini jawaban yang lebih baik.
Xofo

9

Pertanyaan Anda adalah tentang menemukan file biner yang berisi pola (dan kami sudah memiliki jawaban yang sangat bagus!). Pelengkap kami mungkin ingin mendapatkan kejadian.

Saya sering menggunakan

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

untuk mendapatkan konteks sekitar 20-char.

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.