一種方法是簡單地把二進制文件爲文本,無論如何,與grep --text
但是這很可能導致二進制信息被髮送到你的終端。這是不是一個真正的好主意,如果你正在運行解譯輸出流(如VT/DEC或其他許多人)的終端。
或者,你可以用下面的命令,通過tr
發送文件:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
這將改變任何小於一個空格字符(除換行符)和任何大於126,爲.
人物,留下只有printables。
如果你想每一個「非法」字符被另一個取代,您可以使用類似下面的C程序,一個經典的標準輸入濾波器:
#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;
}
這會給你{{NN}}
,其中NN
是字符的十六進制代碼。您可以簡單地調整printf
以獲得您想要的任何輸出樣式。
你可以看到,程序行動在這裏,在這裏:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob
請注意,有一種程序可以從二進制文件中濾除二進制字符,並只保留文本字符(可讀)。這裏: http://www.soft.tahionic.com/download-words_extractor/index.html – Ampere 2013-05-29 09:01:10
不好意思,但是......你不是在'echo'命令中缺少'-e'嗎? – 2014-12-13 00:46:34
如果你使用'zsh',沒有-e就沒問題。如果你使用'bash',你應該添加'-e'。 – 2014-12-14 03:30:43