ログファイルからBSとESCを削除する

ログファイルからBSとESCを削除する

このscriptコマンドを使用して入力したキーストロークを記録するか、または記録モードを有効にするたびに、screenすべてのBS(バックスペース)キーとESC(escキー)キーストロークもファイルに含まれます。たとえば: cd ~/foo/tpBSBStmp

最後に記録されたコマンドがファイルに含まれるようにファイルからBSまたはESCを自動的に削除する方法はありますかcd ~/foo/tmp

ちなみに、これはPuttyのロギング機能でも起こります。

私は望ましくない文字を削除するスクリプト、または同じことを行う他のコマンドにも開いています。

答え1

マンページで説明されているように、出力にはscript常に改行、バックスペース、およびANSIエスケープシーケンスが含まれています。これらの項目をすべて正しく表示できるプログラムの例は、catとですmore。録音するときと同じタイプのスクリプトが表示さcat typescriptれます。more typescript

それでもタイプスクリプトを整理したい場合は見てください。これスクリプト。これは私がしばらく前に発見したPerlスクリプトです。特にscript

試してみてください。script-declutter myTypescript > cleanTypescript

編集:答えとは実際には関係ありませんが、興味があるかもしれません。学期記録。ターミナルセッション用のきれいで独立したHTMLおよびJavascript表現を生成するので、誰もがTypeScriptの操作方法を知らなくてもそれを見ることができます。彼らに必要なのはWebブラウザだけです。

答え2

-vte引数を使用すると、cat端末コードがエスケープされます。

例えば

cat -vte myfile

答え3

リンクはscript-declutter機能しませんが、次のページに表示されます。Webページ:

#!/usr/bin/perl -wp

# clean up control characters and other non-text detritus that shows up
# when you run the "script" command.

BEGIN {
# xterm titlebar escape sequence
$xtermesc = "\x1b\x5d\x30\x3b";

# the occurence of a backspace event (e.g. cntrl H, cntrol W, or cntrl U)
$backspaceevent = "\x1b\\\x5b\x4b"; # note escaping of third character

# ANSI color escape sequence
$ansiesc = qr/\x1b\[[\d;]*?m/;

# technically, this is arrow-right. For some reason, being used against
# very long backspace jobs. I don't fully understand this, as evidenced
# by the fact that is off by one sometimes.
$bizarrebs = qr/\x1b\[C/;

# used as part of the xterm titlebar mechanism, or when
# a bell sounds, which might happen when you backspace too much.
$bell = "\x07"; # could use \a

$cr = "\x0d"; # could use \r

$backspace = "\x08"; # could use \b
}

s/$xtermesc.+?$bell//g;
s/[$cr$bell]//g;
s/${backspaceevent}//g;
s/$ansiesc//g;
while (s/(.)(?=$backspace)//) { s/$backspace//; } # frickin' sweet
# For every ^H delete the character immediately left of it, then delete the ^H.
# Perl's RE's aren't R, so I wonder if I could do this in one expression.
while (s/(..)(?=$bizarrebs)//) { s/$bizarrebs//; }

# notes
# ^[[7P has been spotted. Based on http://www.google.com/codesearch/p?hl=en#4qbG402gtc0/myScreen.C&q="[7P" it appears to be a numbered cursor jump, moving 7 characters (not sure if left or right).

他の例よりも少し複雑ですが、いくつかの注意事項が順番に示されています。

  • Bash行の編集に使用されるカーソル左エスケープシーケンスを説明します(部分:作成者はテキスト内のカーソルを移動する実際の使用ではなく、バックスペースキーと同じ方法で使用されると思うようです)。いいえ修正済み)。
  • yumスケジュールに使用される埋め込みキャリッジリターンは考慮されません。
  • 削除されるエスケープシーケンスの概念は、SGRエスケープ(で終わるm)に限定され、無視されます。モデルhまたはで終わりますl

最後の2つの操作を実行してもカーソルを左に移動しない(より短い)スクリプトについては、前の質問に対する私の答えを参照してください。

画面の「部分」を頻繁に更新してログファイルを複雑にするコンソールプログラムの出力を正しく記録するにはどうすればよいですか?

関連情報