予期しないログから印刷できない文字を削除しますか?


8

ファイルから次の文字シーケンスを削除するにはどうすればよいですか?^[[64;8H^[[?25h^[[1;64rなどまたは最初の場所でそれらを追加する期待を避けますか?

バックグラウンド:

特定のタスクにexpectスクリプトのコレクションを使用しています。

私が収集している出力ファイルには、上記のタイプの文字が含まれていることがよくあります(emacs / vi / cat -vで表示されます)。以下のようなtrコマンドをいくつか試しましたが、[64; 8Hなどが表示されるだけです。

tr -dc '[:print:]\n' < input

編集:

問題のある行での上記の結果

[1;64r[64;1H[64;1H[2K[64;1H[?25h[64;1H[64;.....

回答:


6

あなたは近くにいた。あなたが欲しい

tr -dc '[:print:]\n' <input

tr(1)manページから:

-c、-C、-complement
はSET1の補数を使用します

更新

エスケープシーケンスも削除する場合は、次のsedスニペットを使用できます。

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

これは、CentOS 4.4と呼ばれるサーバー障害の質問から取得したもので、テキストファイルからエスケープシーケンスを削除するにはどうすればよいですか?


ジョセフに感謝します。これにより、文字は表示されますが、取り除かれることはありません。結果を質問の本文に表示します。
Tim Brigham、

@TimBrigham更新は役に立ちますか?
ジョセフR.

1

いくつかの実験の後(私はすべてを色づけする魚の殻を使用しています):

perl -pe '
    s/\033\\\\\[(\d+;)*\d*[[:alpha:]]//g;
    s/\033\\\\\]0;//g;
    s/\x7//g;
    s/\033\(B//g;
' expect.log
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.