每当我使用该script
命令记录我键入的按键或激活 中的记录模式时screen
,所有 BS(退格键)和 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 表示,以便任何人都可以查看它们,而无需了解如何处理打字稿。他们所需要的只是一个网络浏览器。
答案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
。
对于执行最后两个操作(但仍然不是光标左移)的(较短的)脚本,请参阅我对较旧问题的回答