Lệnh tương đương với tệp nhị phân grep


24

Tôi có một loạt các nhị phân và tôi biết rằng bên trong các nhị phân này có các chuỗi tôi muốn tìm.

Tôi muốn làm một:

grep -lir "the string I am looking for"

và nhận danh sách tất cả các tệp nhị phân trong một thư mục cụ thể có chứa chuỗi đó nhưng grep -lirdường như không hoạt động với các tệp này.

Có một lệnh có thể thực hiện loại tìm kiếm này từ thiết bị đầu cuối?

Câu trả lời:


24

Với GNU grep , bạn có thể sử dụng tùy chọn -a để làm cho nó xử lý các tệp nhị phân dưới dạng tệp văn bản:

grep -ali -- string file

Nếu phiên bản grep của bạn không hỗ trợ -a, bạn có thể sử dụng ack thay thế. Với ack 1.x, bạn cần bao gồm -atùy chọn, với ack 2.x, bạn không nên, vì khi tìm kiếm bao gồm tệp không phải văn bản theo mặc định (chỉ bỏ qua tệp không phải văn bản khi bạn không chỉ định bất kỳ tệp nào).


Có phải tôi đang đọc sai acktự mô tả? (trong hướng dẫn sử dụng) "ack 2.x sẽ tìm kiếm thông qua mọi tệp không nhị phân thông thường không bị bỏ qua rõ ràng [bởi blah blah]" Vì vậy, có vẻ như ack 2.x vẫn nên dừng đọc tệp sớm nếu nội dung trông có vẻ nhị phân.
Peter Cordes

1
@PeterCordes: Điều đó xảy ra khi không có tệp nào được chọn. Hãy thử ack grep /bin/grepvà bạn sẽ nhận được kết quả. Tôi cập nhật câu trả lời của tôi để tránh nhầm lẫn.
cuonglm

1
Hãy thử sử dụng lệnh chuỗi để lấy chuỗi từ nhị phân của bạn.
Burger Uwe

23

Lệnh stringssẽ trích xuất tất cả dữ liệu ascii từ một tệp, nếu bạn xuất dữ liệu grep, bạn có thể tìm kiếm dữ liệu của mình:

strings <filename> | grep "search text"

Đây phải là câu trả lời được chấp nhận. Nhị phân này là phù hợp tốt cho nhiệm vụ này.
Vladislavs Dovgalecs

5
@xeon: Không phải lúc nào cũng tốt để sử dụng strings, đọc ở đây để biết thêm chi tiết.
cuonglm 24/07/2015

1
Vì mục đích là để xác định nhị phân chứa chuỗi, strings -fsẽ thích hợp hơn.
jamesdlin 24/07/2015

Đây là một câu trả lời tốt hơn.
Xofo

9

Câu hỏi của bạn là về việc tìm các tệp nhị phân có chứa một mẫu (và chúng tôi đã có câu trả lời rất tốt!). Bổ sung, chúng tôi có thể muốn có được sự xuất hiện.

Tôi thường sử dụng

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

để có được một bối cảnh xung quanh của 20 char.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.