示例:我开始录制script,并尝试键入echo test但省略o,所以我退格以纠正它.
当我的cat typescript一切看起来正常,因为代码被解释,但如果我使用less或vim我看到ech test^H^[[K^H^[[K^H^[[K^H^[[K^H^[[Ko test^M
我完全理解这是什么以及它为什么会发生,但有没有办法"烧入"代码并只在文件中看到结果?我的kludgy方法是对cat文件,然后将文本复制/粘贴到终端之外,但肯定有一些cat,sed,awk或其他东西的组合可以让我更容易?
要显示包含 ANSI 序列的文件,
less -r typescript
Run Code Online (Sandbox Code Playgroud)
或者,
less -R typescript
Run Code Online (Sandbox Code Playgroud)
要从文件中删除 ANSI 和退格序列,创建一个 clean newfile,请尝试:
sed -r ':again; s/[^\x08]\x08\x1b\[K//; t again; s/\x1b_[^\x1b]*\x1b[\]//g; s/\x1B\[[^m]*m//g' typescript >newfile
Run Code Online (Sandbox Code Playgroud)
-r
这将打开扩展正则表达式。(在 BSD 系统上,-r应替换为-E。现代版本的 GNU sed 将接受 或-r。-E)
`:再次;s/[^\x08]\x08\x1b[K//; 再次
这会删除所有退格序列。这些都是在循环中一次完成一个。
s/\x1b_[^\x1b]*\x1b[\]//g
作为xterm扩展(请参阅文档),Esc _ something Esc \不会执行任何操作。此命令删除这些序列。
s/\x1B\[[^m]*m//g
这会删除设置颜色等的剩余 ANSI 序列。
这涵盖了我通常遇到的所有控制序列。有各种各样的扩展控制序列,如果您的输出中有一些我没有见过的,则代码可能需要扩展。
sed在 BSD 或 POSIX 系统上,各个命令必须使用-e选项而不是分号链接在一起。因此,尝试:
sed -e ':again' -e 's/[^\x08]\x08\x1b\[K//' -e 't again' -e 's/\x1b_[^\x1b]*\x1b[\]//g' -e 's/\x1B\[[^m]*m//g'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |