Tại sao grep không bỏ qua các tệp nhị phân theo mặc định?


94

Trang hướng dẫn grepmô tả -Icờ như sau:

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

Nó cũng nói điều này về các tệp nhị phân:

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

Tôi không thể nghĩ ra một kịch bản mà tôi sẽ quan tâm đến các trận đấu trong các tệp nhị phân. Nếu một kịch bản như vậy tồn tại, chắc chắn nó phải là ngoại lệ chứ không phải là tiêu chuẩn. Tại sao không grepbỏ qua các tệp nhị phân theo mặc định thay vì yêu cầu đặt cờ này để làm như vậy?


4
Bạn có thể đặt biến GREP_OPTIONSthành cài đặt ưu tiên, sau đó bạn không phải sử dụng nhiều công tắc dòng lệnh đó.
Marco

2
Một lưu ý cho các lệnh khác không hỗ trợ biến như vậy: Bạn có thể đặt các tùy chọn mặc định bằng cách xác định bí danh trong .(ba|z|foo)shrc': bí danh của mình grep = "grep -I" `.
Erik

1
Điều này thực sự có thể rất hữu ích. Ví dụ, tôi đang tìm kiếm phiên bản thống nhất của một dự án và không thể nhớ được tập tin nào được lưu giữ. Tôi đã tìm kiếm định dạng của phiên bản và nó đã tìm ra một số tệp nhị phân phù hợp. Hóa ra là phiên bản trước 5, phiên bản chỉ có trong tệp nhị phân, vì vậy nếu không có kết quả nhị phân, tôi có thể đã bỏ lỡ nó.
Svend Hansen

FYI Có một công cụ ack "tốt hơn grep". Ack không tìm kiếm tệp nhị phân. Trong Debian, nó có tên "ack-grep".
teika kazura

Câu trả lời:


91

Không phải tất cả mọi thứ mà grep nghĩ là một tệp nhị phân, thực sự là một tệp nhị phân. ví dụ: nhật ký của con rối có mã màu ansi trong đó, điều này khiến grep nghĩ chúng là nhị phân. Tôi vẫn muốn tìm kiếm chúng nếu tôi đang lướt qua / var / log.


4
Điều tương tự cũng xảy ra với các tệp PDF.
Joseph R.

12
+ grep trong lịch sử KHÔNG thể làm điều đó, vì vậy chỉ để tương thích, mặc định phải bao gồm tất cả.
Olivier Dulac

2
@OlivierDulac nó có ý nghĩa, nếu không bỏ qua các tệp nhị phân nên là mặc định.
Dagang

5

grepKhả năng tìm kiếm tệp nhị phân cũng hữu ích khi tôi biên dịch chương trình và trình liên kết ( ld) phàn nàn về một số chức năng không được tìm thấy. Tôi có thể sử dụng một lệnh như

hàm grep_name / lib / lib *

để tìm thư viện chứa nó. (Thư viện là tệp nhị phân.)


Trong trường hợp đó, bạn muốn sử dụng grep -l function_name /lib/lib*hay nm -Do /lib/lib* | grep function_namehay ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_namemặc dù.
Stéphane Chazelas

Vâng, grep some_function /lib/*ngắn hơn và thường đưa ra câu trả lời chính xác - tên của thư viện tôi đang tìm kiếm. Nhưng có, đôi khi cách tiếp cận tinh vi hơn như của bạn cũng được yêu cầu.
Daniel Frużyński
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.