从日志文件中删除 BS 和 ESC

从日志文件中删除 BS 和 ESC

每当我使用该script命令记录我键入的按键或激活 中的记录模式时screen,所有 BS(退格键)和 ESC(退出键)按键也会包含在文件中。例如:cd ~/foo/tpBSBStmp.

有没有办法自动从文件中删除 BS 或 ESC,以便文件中包含的最终记录命令是cd ~/foo/tmp

顺便说一句,这也发生在 Putty 的日志记录功能中。

我愿意接受任何删除不需要的字符的脚本,甚至是执行相同工作的其他命令

答案1

的输出script将始终包含换行符、退格键和 ANSI 转义序列,如联机帮助页中所述。可以正确显示所有这些的程序示例是catmorecat typescript并将more typescript显示与您录制时完全相同的打字稿。

如果您仍然想清理打字稿,请看一下脚本。这是我不久前偶然发现的一个 Perl 脚本,专门用于清理用script.

通过运行来尝试一下script-declutter myTypescript > cleanTypescript

编辑:与答案并不真正相关,但您可能感兴趣学期记录。它创建了终端会话的整洁、自包含的 HTML 和 Javascript 表示,以便任何人都可以查看它们,而无需了解如何处理打字稿。他们所需要的只是一个网络浏览器。

答案2

如果您使用-vte的参数cat,它将转义终端代码。

例如

cat -vte myfile

答案3

链接script-declutter无效,但显示在网页:

#!/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

对于执行最后两个操作(但仍然不是光标左移)的(较短的)脚本,请参阅我对较旧问题的回答

如何正确记录经常更新屏幕“部分”的控制台程序的输出,从而导致日志文件混乱?

相关内容