从输出中删除颜色代码

从输出中删除颜色代码

可能的重复:
从脚本输出中删除控制字符(包括控制台代码/颜色)

我正在编写一个脚本,与我正在编写的程序一起工作。我想做的是使用另一个脚本评估许多客户端的完成程度。我的脚本几乎完全按照我想要的方式执行,但是有一些颜色常量插入到我的 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";

相关内容