Une façon est de simplement traiter les fichiers binaires comme du texte de toute façon, grep --text
mais cela peut entraîner l'envoi d'informations binaires à votre terminal. Ce n'est pas vraiment une bonne idée si vous exécutez un terminal qui interprète le flux de sortie (tel que VT / DEC ou bien d'autres).
Vous pouvez également envoyer votre fichier via tr
la commande suivante:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Cela changera tout ce qui est inférieur à un caractère d'espace (sauf le saut de ligne) et tout ce qui est supérieur à 126 en un .
caractère, ne laissant que les imprimables.
Si vous voulez que chaque caractère "illégal" soit remplacé par un autre, vous pouvez utiliser quelque chose comme le programme C suivant, un filtre d'entrée standard classique:
#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;
}
Cela vous donnera {{NN}}
, où NN
est le code hexadécimal du caractère. Vous pouvez simplement ajuster le printf
pour le style de sortie souhaité.
Vous pouvez voir ce programme en action ici, où il:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob