如何“取消ANSI-fy”日志?


10

最近,命令行工具趋向于在其日志输出中使用奇特的ANSI颜色(例如,NPM和许多基于nodejs的工具,rvm,docker和一些其他“现代”工具)。

这使您可以在屏幕(*)上进行阅读,但如果要将输出通过管道传输到日志文件或通过不能很好地处理ANSI的传输方式(例如各种远程执行工具和基于Web的监视解决方案),就不太好了。许多更成熟的工具至少能够检测出何时输出的不是TTY并禁用颜色,但是不能使用那些新的“用户友好” CLI-这使我无法通过管道操作来摆脱ANSI颜色。通过另一个过程输出。

对输出进行遍历s/\x1B\[[0-9]*\w//g似乎可以完成工作,但是有没有一种更干净的方法,然后将粘贴正则表达式复制到我的所有脚本中?

(*),直到工具尝试在深色背景终端上以深红色显示错误为止。


2
请参阅:unix.stackexchange.com/questions/14684/... - unix.stackexchange.com/questions/111899/... stackoverflow.com/questions/17998978/... superuser.com/questions/380772/... - 4+之间的问题了在3个站点的3年时间里,我们仅获得使用正则表达式替换/删除工具的答案。我猜没有比这更好的了。
Zoredache

唯一值得讨论的是哪种正则表达式最适合哪种情况。
Zoredache

1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?-将清理过滤器保存到名为“ /usr/local/bin/stripttycolor.sh”的文件中?这样,您就可以将正则表达式限制在单个位置吗?
Zoredache

3
如果您知道将输出写入文件,最简单的操作(至少对于NPM)是使用--no-color标志运行。许多其他命令也具有类似的标志。
Moshe Katz

@MosheKatz:不幸的是,例如,并非所有命令都可以bower
格斯,2015年

Answers:


1

“ ansifilter -p”可能对您有用...

在Fedora仓库中;-p指定普通输出:

Name        : ansifilter
From repo   : updates
Summary     : ANSI terminal escape code converter
URL         : http://www.andre-simon.de/doku/ansifilter/ansifilter.php
License     : GPLv3+
Description : Ansifilter handles text files containing ANSI terminal escape codes.
            : The command sequences may be stripped or be interpreted to generate formatted
            : output (HTML, RTF, TeX, LaTeX, BBCode).

效果很好,现在我只需要将其打包为Ubuntu :-)
Guss,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.