Có một cách là dù sao cũng chỉ cần coi các tệp nhị phân là văn bản, grep --text
nhưng điều này cũng có thể dẫn đến thông tin nhị phân được gửi đến thiết bị đầu cuối của bạn. Đó thực sự không phải là một ý tưởng hay nếu bạn đang chạy một thiết bị đầu cuối thông dịch luồng đầu ra (chẳng hạn như VT / DEC hoặc nhiều thiết bị khác).
Ngoài ra, bạn có thể gửi tệp của mình thông qua tr
lệnh sau:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Điều này sẽ thay đổi bất kỳ thứ gì nhỏ hơn ký tự khoảng trắng (ngoại trừ dòng mới) và bất kỳ thứ gì lớn hơn 126, thành một .
ký tự, chỉ để lại các bản in.
Nếu bạn muốn mọi ký tự "bất hợp pháp" được thay thế bằng một ký tự khác, bạn có thể sử dụng một cái gì đó như chương trình C sau, một bộ lọc đầu vào tiêu chuẩn cổ điển:
#include<stdio.h>
int main (void) {
int ch;
while ((ch = getchar()) != EOF) {
if ((ch == '\n') || ((ch >= ' ') && (ch <= '~'))) {
putchar (ch);
} else {
printf ("{{%02x}}", ch);
}
}
return 0;
}
Điều này sẽ cung cấp cho bạn {{NN}}
, đâu NN
là mã hex cho ký tự. Bạn có thể chỉ cần điều chỉnh printf
bất kỳ kiểu đầu ra nào bạn muốn.
Bạn có thể thấy chương trình đó đang hoạt động tại đây, trong đó:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob