1つの方法は、とにかく単純にバイナリファイルをテキストとして扱うことですgrep --text
が、これにより、バイナリ情報が端末に送信される可能性があります。出力ストリームを解釈する端末(VT / DECなど)を実行している場合、これは実際に良い考えではありません。
または、tr
次のコマンドを使用してファイルを送信できます。
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
これにより、スペース文字(改行を除く)未満および126より大きいものはすべて文字に変更され.
、印刷可能ファイルのみが残ります。
すべての「不正な」文字を別の文字に置き換えたい場合は、次のCプログラムのようなものを使用できます。これは、古典的な標準入力フィルターです。
#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
が表示されます。は、キャラクターの16進コードです。printf
必要な出力スタイルに合わせてを調整できます。
あなたはここでそのプログラムが動作しているのを見ることができます:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob