我有一个生成彩色输出的命令,我想将其通过管道传输到一个文件中,并删除颜色代码。是否有一个命令的工作原理类似cat
,只是它会去除颜色代码?我计划做这样的事情:
$ command-that-produces-colored-output | stripcolorcodes > outfile
答案1
你可能会认为有一个实用程序可以实现这一点,但我找不到它。然而,这个 Perl 语句应该可以解决问题:
perl -pe 's/\e\[?.*?[\@-~]//g'
例子:
$ command-that-produces-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g' > outfile
或者,如果您想要脚本,可以另存为stripcolorcodes
:
#! /usr/bin/perl
use strict;
use warnings;
while (<>) {
s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
print;
}
如果你想脱仅有的颜色代码,并保留任何其他 ANSI 代码(例如光标移动),使用
s/\e\[[\d;]*m//g;
而不是我上面使用的替换(删除所有 ANSI 转义码)。
答案2
使用 GNU sed 删除颜色代码(特殊字符)
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
或者
在 Python 中去除 ANSI 转义序列
安装色拉玛python 包 ( pip install colorama
).投入stripcolorcodes
:
#!/usr/bin/env python
import colorama, fileinput, sys;
colorama.init(strip=True);
for line in fileinput.input():
sys.stdout.write(line)
跑步chmod +x stripcolorcodes
。
答案3
如果您可以安装术语::ANSIColor模块,这个 perl 脚本可以工作:
#!/usr/bin/env perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
答案4
$ command-that-produces-colored-output | ansifilter
...如果有必要的话,(dnf, ...) install ansifilter