【问题标题】:How to remove terminal control escape sequences in the file?如何删除文件中的终端控制转义序列?
【发布时间】:2013-11-02 14:07:17
【问题描述】:

我从远程 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”获取更多详细信息。
我的问题是如何删除文件中的这些终端控制转义序列?
非常感谢!

【问题讨论】:

标签: linux terminal terminfo


【解决方案1】:

我根据http://invisible-island.net/xterm/ctlseqs/ctlseqs.html使用大量正则表达式解决了这个问题

【讨论】:

    【解决方案2】:

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

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

    Ctrl+V,然后按 esc 键以获取上面的 &lt;escape-key&gt; 字符。其他所有内容与键盘中的文字键相同。

    【讨论】:

      【解决方案3】:

      我像这样使用管道或直接 sed

      sed 's/[^[:print:]]\[[^a-zA-Z]*[a-zA-Z]//g' YourFile
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多