Un modo è quello di trattare semplicemente i file binari come testo comunque, grep --textma questo potrebbe comportare l'invio di informazioni binarie al tuo terminale. Non è proprio una buona idea se stai utilizzando un terminale che interpreta il flusso di output (come VT / DEC o molti altri).
In alternativa, puoi inviare il tuo file trcon il seguente comando:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Questo cambierà qualsiasi cosa minore di uno spazio (eccetto la nuova riga) e qualsiasi cosa maggiore di 126, in un .carattere, lasciando solo gli stampabili.
Se vuoi che ogni carattere "illegale" venga sostituito da uno diverso, puoi usare qualcosa di simile al seguente programma C, un classico filtro di input standard:
#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;
}
Questo ti darà {{NN}}, dov'è NNil codice esadecimale per il personaggio. Puoi semplicemente regolare il printfper qualunque stile di output desideri.
Puoi vedere quel programma in azione qui, dove:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob