Salah satu caranya adalah dengan memperlakukan file biner sebagai teks saja, grep --texttetapi ini dapat mengakibatkan informasi biner dikirim ke terminal Anda. Itu bukan ide yang bagus jika Anda menjalankan terminal yang menafsirkan aliran keluaran (seperti VT / DEC atau banyak lainnya).
Atau, Anda dapat mengirim file Anda melalui tr perintah berikut:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Ini akan mengubah apa pun yang kurang dari karakter spasi (kecuali baris baru) dan apa pun yang lebih besar dari 126, menjadi a . karakter, hanya menyisakan barang cetakan.
Jika Anda ingin setiap karakter "ilegal" diganti dengan yang berbeda, Anda dapat menggunakan sesuatu seperti program C berikut, filter input standar klasik:
#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;
}
Ini akan memberimu {{NN}} , di mana NNkode hex untuk karakter tersebut. Anda cukup menyesuaikan fileprintf untuk gaya keluaran apa pun yang Anda inginkan.
Anda dapat melihat program itu beraksi di sini, di mana:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob