วิธีหนึ่งคือการจัดการไฟล์ไบนารีเป็นข้อความต่อไปด้วย grep --text
แต่อาจส่งผลให้ข้อมูลไบนารีถูกส่งไปยังเทอร์มินัลของคุณ นั่นไม่ใช่ความคิดที่ดีจริงๆหากคุณกำลังใช้งานเทอร์มินัลที่ตีความสตรีมเอาต์พุต (เช่น VT / DEC หรืออื่น ๆ อีกมากมาย)
หรือคุณสามารถส่งไฟล์ของคุณผ่านtr
คำสั่งต่อไปนี้:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
สิ่งนี้จะเปลี่ยนอะไรก็ได้ที่น้อยกว่าอักขระเว้นวรรค (ยกเว้นขึ้นบรรทัดใหม่) และอะไรก็ตามที่มากกว่า 126 เป็น.
อักขระโดยเหลือเพียงสิ่งที่พิมพ์ได้
หากคุณต้องการให้อักขระ "ผิดกฎหมาย" ทุกตัวถูกแทนที่ด้วยอักขระอื่นคุณสามารถใช้โปรแกรม 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