如何将日志还原为非ANSI格式?

最近,命令行工具倾向于在其日志输出中使用花哨的ANSI颜色(例如NPM和一些基于nodejs的工具、rvm、docker以及其他一些“现代化”工具)。 这样做可以使屏幕上的阅读更加舒适(*),但是当您想要将输出导入到日志文件中或通过无法很好处理ANSI的各种远程执行工具和基于Web的监控解决方案时,情况就不那么理想了。许多更成熟的工具至少会检测到输出不是TTY并禁用颜色,但对于那些新颖的“用户友好”命令行界面来说却不是这样 - 这让我尝试通过将输出传递给另一个进程来去除ANSI颜色。 通过使用s/\x1B\[[0-9]*\w//g的Sed命令似乎能够完成任务,但是否有比只是将正则表达式复制粘贴到我的所有脚本中更简洁的方法? (*) 至少在工具试图在您的深色背景终端上显示暗红色错误之前是这样。

2请查看以下链接:http://unix.stackexchange.com/questions/14684/removing-control-chars-including-console-codes-colours-from-script-output - http://unix.stackexchange.com/questions/111899/how-to-strip-color-codes-out-of-stdout-and-pipe-to-file-and-stdout http://stackoverflow.com/questions/17998978/removing-colors-from-output http://superuser.com/questions/380772/removing-ansi-color-codes-from-text-stream — 在三个网站上经过三年时间的四个问题中,我们只找到了使用正则表达式替换/删除工具的答案。我猜没有更好的解决办法了。 - Zoredache
关于唯一有争议的事情似乎是哪种正则表达式适用于哪种情况。 - Zoredache
1有没有比将正则表达式复制粘贴到所有脚本中更简洁的方法?- 将您的清理过滤器保存到一个名为'/usr/local/bin/stripttycolor.sh'或其他名称的文件中?这样,您可以将正则表达式限定在一个单独的位置。 - Zoredache
3如果你知道你将要把输出写入文件中,最简单的办法(至少对于NPM)就是使用--no-color标志来运行。许多其他命令也有类似的标志。 - Moshe Katz
@MosheKatz:不幸的是,并非所有的命令都可以,比如bower - Guss
@Zoredache:这更多是关于配置中的脚本问题,比如在CI中的构建脚本或源代码存储库中的设置脚本 - 我不想依赖非标准功能,因为安装额外脚本就是另一个系统设置步骤,我需要管理它(或者通过每个模块都有一个实现而不是每个使用来降低复杂性,但仍然不完全正确)。 - Guss
@Guss,你使用的Bower版本是多少?它从2012年开始就支持了那个标志位(https://github.com/bower/bower/commit/77fb081b9304064ceac244fa1eeab681ecc392d3)。 - Moshe Katz
好的,我在文档里找不到它,所以我假设它不起作用。真是傻我了。 - Guss
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