如何在文件中移除终端控制转义序列?

4
我收到了一份来自远程Linux计算机的日志,它看起来像这样:
2013-10-23T08:19:05+0300 Last login: Wed Oct 23 08:17:38 EEST 2013 from 10.9.167.55 on pts/0  
2013-10-23T08:19:05+0300 Last login: Wed Oct 23 08:19:05 2013 from 10.9.167.55^M  
2013-10-23T08:19:07+0300 ^[[?1034h-bash-4.1$ date  
2013-10-23T08:19:07+0300 Wed Oct 23 08:19:07 EEST 2013  
2013-10-23T08:19:08+0300 -bash-4.1$ ls  
2013-10-23T08:19:08+0300 ^[[0m^[[01;34m99^[[0m #avail.info ^[[01;34mgmoTemp^[[0m raml21.dtd SNMP4JTestAgentBC.cfg  
2013-10-23T08:19:08+0300 an_mainHost_localhost_20131023081654000136.xml #avail.info~ gsh.txt ^[[01;34mresults^[[0m  
2013-10-23T08:19:09+0300 ^[[m-bash-4.1$ exit  
2013-10-23T08:19:09+0300 logout

但应该是:
Last login: Wed Oct 23 08:17:38 EEST 2013 from 10.9.167.55 on pts/0  
Last login: Wed Oct 23 08:19:05 2013 from 10.9.167.55  
-bash-4.1$ date  
Wed Oct 23 08:19:07 EEST 2013  
-bash-4.1$ ls  
99                                              #avail.info   gmoTemp  raml21.dtd  SNMP4JTestAgentBC.cfg  
an_mainHost_localhost_20131023081654000136.xml  #avail.info~  gsh.txt  results  
-bash-4.1$ exit  
logout  

这些混乱的代码是终端控制转义序列,您可以使用命令“infocmp xterm”和“man terminfo”获取更多详细信息。
我的问题是如何在文件中删除这些终端控制转义序列?
非常感谢!


两个答案都不适用于这个例子。请参阅Can I programmatically “burn in” ANSI control codes to a file using unix utils? - Thomas Dickey
3个回答

4
我使用管道或直接使用sed实现如下:
sed 's/[^[:print:]]\[[^a-zA-Z]*[a-zA-Z]//g' YourFile

4

使用以下命令在vim中简单地删除大部分控制字符:

:%s/<escape-key>\[[0-9;]*m/ /g

按下Ctrl键和V键,然后按esc键,即可输入上面的字符<escape-key>。其它所有按键都与您的键盘上一模一样。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接