如何清理script命令生成的typescript文件中的特殊字符?
解决script命令生成的typescript文件特殊字符问题
一、事前避免:启动script时直接减少特殊字符生成
直接指定极简终端类型,让终端不输出颜色、光标控制等特殊序列:
TERM=dumb script clean_session.log
TERM=dumb会让终端识别为不支持高级控制的哑终端,不会生成^[[?2004h这类功能切换序列、颜色代码等冗余内容,日志会更干净。
如果不需要script输出启动/结束的提示信息,可结合-q安静模式:
TERM=dumb script -q clean_session.log
二、事后处理:清理已生成的typescript文件
用组合命令一次性清理所有特殊字符:
col -b < typescript | sed -e 's/\x1b\[[0-9;]*m//g' -e 's/\x1b\[\?200[4-8][hl]//g' -e 's/\r$//' > cleaned_typescript
各部分作用:
col -b:去除退格符(H)和擦除序列([[K),修复输入时的删除痕迹sed -e 's/\x1b\[[0-9;]*m//g':删除所有ANSI颜色控制序列(如^[[01;32m这类颜色代码)sed -e 's/\x1b\[\?200[4-8][hl]//g':删除终端功能切换序列(如^[[?2004h/l)sed -e 's/\r$//':删除行尾的^M回车符
Vim内直接清理的方法
如果习惯用Vim编辑,依次执行以下替换命令:
- 删除行尾的^M:
:%s/\r$//g - 删除ANSI颜色控制序列:
:%s/\%x1b\[[0-9;]*m//g - 删除终端功能切换序列:
:%s/\%x1b\[\?200[4-8][hl]//g - 删除退格+擦除的输入痕迹:
:%s/\%x08\%x1b\[\[K//g
你之前在Vim里用:s/^M^/没效果,是因为语法错误——M对应回车符(`\r`),正确匹配应该是直接写`\r`或者用`Ctrl+V+M`插入M,不需要额外加^后缀。
内容的提问来源于stack exchange,提问作者Mathew
相关产品推荐
相关产品推荐

