可能的重复:
从脚本输出中删除控制字符(包括控制台代码/颜色)
我正在编写一个脚本,与我正在编写的程序一起工作。我想做的是使用另一个脚本评估许多客户端的完成程度。我的脚本几乎完全按照我想要的方式执行,但是有一些颜色常量插入到我的 XML 输出中,当我稍后将 XML 解析为 PHP 时,这些常量会弄乱事情。长话短说,我有一个正在使用的 sed 表达式,它删除了颜色常量的第一部分,但它无法删除看起来像 ^[(B - 因此是我的问题。
这是我正在使用的 sed 序列:
sed -r 's/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g'
我想知道是否有一个单独的 sed 序列我可以在之后运行以删除尾随序列。我尝试过使用
sed 's/\^\[\\(B//'
但它似乎并没有删除任何东西。我不一定需要答案,如果有人对 sed 和颜色代码有很好的指南,那也会非常有帮助。我用谷歌搜索过,但我找到的答案似乎只是删除了颜色的开口部分。
感谢您的帮助。
答案1
ANSI 转义码以ESC
或 字符\033
颜色代码(它们的子集)开头,\033[Xm
其中 X 是分号分隔的数字列表,可能为空(这意味着重置)。 m 是字面量 m。
由于我自己一直忘记这些代码,所以我将它们“记录”在https://github.com/seveas/hacks/blob/master/ansi.py。
至于 sed 表达式:我会选择s/\x1B\[[0-9;]*[JKmsu]//g
答案2
你可以用 Perl 来做。
#!/usr/bin/env perl
# catch the output of some command
my $output = `command`;
# remove only color codes
$output =~ s/\e\[[\d;]*m//g;
# or remove all ANSI escape sequences
# $output =~ s/\e\[?.*?[\@-~]//g
print "$output","\n";