我们有一个内部的承包商帮助进行某种产品的configuration,我们试图通过他为我们设置的腻子日志来查看,而不是使用“可打印输出”,而是使用“所有会话输出”,其中包括每个包括“BS”等的击键,使得日志非常难以阅读,因为他有许多错别字。 即:
[ESC]] 0; root @ host:〜[BEL] [root @ host〜]#itm,cm [BS] [BS] [ESC] [K [BS] [ESC] [Kcmd agent starp [BS] t
有什么方法可以智能地去除这些控制字符,以便最终的结果是一个人类可读的文件,就像你在“可打印的输出”格式中看到的那样?
谢谢你的build议。 我们的主要观点是[BS]控制字符,这将变成:
ls -pg [BS] [BS] al P [BS] | 格鲁[BS] P博士
成:
ls -al | grep博士
任何想法如何可以完成?
在putty中启用非常大的回滚,捕获日志文件,并将结果复制并粘贴到新文件中。
虽然不完美,这个sedfilter会给你一个起点。
sed -r 's/(\[[AZ]+\]?|\]0;)//g' escapes.log > noescapes.log
如果我通过这个filter来input你的样本,我会得到:
root@host:~[root@host ~]# itm,cmcmd agent starpt
一个依靠命令/脚本parsing出实际terminal代码的解决scheme会更加优雅,这更像是一个“快速修复”。
那些正在尝试学习它们的正则expression式细分:
|字符是OR) \[和\]都是方括号,所以它们不会被解释为字符类。 [ ]包含一个字符类。 [AZ]是匹配任何大写字母的类。 +表示匹配“以前的一个或多个primefaces”。 以前的primefaces是字符类,所以“一个或多个大写字母”。 ? 表示之前的primefaces是可选的。 在这种情况下,可选的primefaces是\] 。 | 字符是OR的开始。 \]0; 匹配'literal']后缀为0;`。 replacestring是空的,所以他们被删除。 /g告诉sed不要停止在第一场比赛。