Bunun bir yolu, ikili dosyaları zaten metin olarak ele almaktır, grep --textancak bu, terminalinize ikili bilgilerin gönderilmesine neden olabilir. Çıkış akışını (VT / DEC veya diğerleri gibi) yorumlayan bir terminal çalıştırıyorsanız, bu gerçekten iyi bir fikir değildir.
Alternatif olarak, dosyanızı traşağıdaki komutla gönderebilirsiniz :
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Bu, boşluk karakterinden daha az olan her şeyi (satırsonu hariç) ve 126'dan büyük her şeyi bir .karaktere dönüştürür ve geriye yalnızca yazdırılabilirleri bırakır.
Her "geçersiz" karakterin farklı bir karakterle değiştirilmesini istiyorsanız, aşağıdaki C programı gibi, klasik bir standart giriş filtresi kullanabilirsiniz:
#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;
}
Bu size {{NN}}, NNkarakterin onaltılık kodunun nerede olduğunu verecektir . Basitçe ayarlayabilirsiniz.printf çıktı tarzı için .
Bu programı burada çalışırken görebilirsiniz, burada:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob