最近,命令行工具倾向于在其日志输出中使用花哨的 ANSI 颜色(例如,NPM 和大量基于 nodejs 的工具、rvm、docker 和一些其他“现代”工具)。
这使得在屏幕上阅读起来很舒服 (*),但当你想将输出管道传输到日志文件或通过不能很好地处理 ANSI 的传输方式时,比如各种远程执行工具和基于 Web 的监控解决方案,情况就不那么好了。许多更成熟的工具至少能够检测到输出是否不是 TTY 并禁用颜色,但那些新奇的“用户友好” CLI 却不行 - 这让我不得不尝试通过将输出管道传输到另一个进程来摆脱 ANSI 颜色。
通过 Sed 输出s/\x1B\[[0-9]*\w//g
似乎可以完成工作,但有没有更简洁的方法,只需将正则表达式复制粘贴到我的所有脚本中即可?
(*)至少直到该工具尝试在深色背景终端上以深红色显示错误。
答案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).