एक तरीका यह है कि द्विआधारी फ़ाइलों को केवल पाठ के रूप में माना जाए, grep --textलेकिन इससे बाइनरी जानकारी आपके टर्मिनल पर भेजी जा सकती है। यह वास्तव में एक अच्छा विचार नहीं है यदि आप एक टर्मिनल चला रहे हैं जो आउटपुट स्ट्रीम (जैसे VT / DEC या कई अन्य) की व्याख्या करता है।
वैकल्पिक रूप से, आप trनिम्नलिखित कमांड के माध्यम से अपनी फ़ाइल भेज सकते हैं :
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
यह एक अंतरिक्ष चरित्र (न्यूलाइन को छोड़कर) और 126 से अधिक कुछ भी को एक .चरित्र में बदल देगा, केवल एक चरित्र में, केवल प्रिंटबल्स को छोड़कर।
यदि आप चाहते हैं कि हर "अवैध" चरित्र को एक अलग से बदल दिया जाए, तो आप निम्नलिखित सी प्रोग्राम की तरह कुछ का उपयोग कर सकते हैं, एक क्लासिक मानक इनपुट फ़िल्टर:
#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