Eine Möglichkeit besteht darin, Binärdateien ohnehin einfach als Text zu behandeln. grep --text
Dies kann jedoch dazu führen, dass Binärinformationen an Ihr Terminal gesendet werden. Das ist keine gute Idee, wenn Sie ein Terminal verwenden, das den Ausgabestream interpretiert (z. B. VT / DEC oder viele andere).
Alternativ können Sie Ihre Datei tr
mit dem folgenden Befehl senden :
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Dadurch wird weniger als ein Leerzeichen (außer Zeilenumbruch) und mehr als 126 in ein .
Zeichen umgewandelt, wobei nur die Ausdrucke übrig bleiben .
Wenn Sie möchten, dass jedes "illegale" Zeichen durch ein anderes ersetzt wird, können Sie das folgende C-Programm verwenden, einen klassischen Standardeingabefilter:
#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;
}
Dies gibt Ihnen an {{NN}}
, wo NN
sich der Hex-Code für das Zeichen befindet. Sie können das einfach printf
für jeden gewünschten Ausgabestil anpassen .
Sie können dieses Programm hier in Aktion sehen, wo es:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob