可能的重复:
从脚本输出中删除控制字符(包括控制台代码/颜色)
重定向到文件时如何禁用所有颜色代码?
我之前问过如何将所有内容重定向到文件,现在我想知道如何在没有颜色的情况下重定向。
所以而不是:
^[(B^[[m^[[1m^[[31m:: ^[(B^[[m^[[1mDaemon script ^[(B^[[m^[[1m^[[31mntpd^[(B^[[m^[[1m does not exist or is not executable.^[(B^[[m
我期待着实现简单:
:: Daemon script ntpd does not exist or is not executable.
更新:
查看 jw013 提供的链接,我尝试了以下sed
方法:
rc.d restart ntpd | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" &> progress.txt
但它甚至没有重定向,只是将彩色输出显示到控制台。
更新2:
在 user1146332 评论之后,为了通过管道传输 STDERR,我必须通过管道传输|&
.
rc.d restart ntpd | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" &> progress.txt
结果是:
^[(B:: ^[(BDaemon script ^[(Bntpd^[(B does not exist or is not executable.^[(B
它更整洁了,但仍然保留了一些代码。但那个sed
正则表达式对我来说太难破译了。
答案1
由于您运行的是 arch linux,因此您可以导出 USECOLOR 变量,
%> export USECOLOR="no" # color-less
%> /etc/rc.d/ntpd stop
以及 sed 去除颜色的技巧,
rc.d stop ntpd | sed -r "s:\x1B\[[0-9;]*[mK]::g"
但这无法处理 rc.d 生成的退格键
答案2
一种简单的可能更通用的方法是将 TERM 变量更改为不支持颜色,例如“vt100”?
答案3
即时写下此内容,不确定颜色代码的格式,但也许可以尝试一下:
command | awk '{gsub(/\^[^Bm]*[Bm]/,"")}1'