你如何忽略但保留带有sed的ANSI转义码?

时间:2016-08-08 11:41:32

标签: regex bash sed

如果您要打印字符串“Hello, \e[38;5;200mworld\e[0m”,您可能会看到“Hello, world”,其中“world”一词突出显示强烈的洋红色(FF00DF),假设您的终端支持它

但是,如果将tree之类的程序的输出传递给column,则会看到对齐方式已损坏,因为在行长度计算中错误地计算了转义码。

作为一个更直接的例子,我尝试使用以下内容在sed中按字符拆分该字符串:

sed 's/\(.\)/\1 /g'

......产生......

H e l l o , 3 8 ; 5 ; 2 0 0 m w o r l d 0 m

...用管道输出前面显示的字符串。

在编辑流时,为了计算,替换,保存等目的,如何匹配转义码?

1 个答案:

答案 0 :(得分:1)

这可能不完全是, 你在寻找什么,但你可以进一步发展这个想法:

您可以删除控制字符 使用col

$ col -bx

或使用sed

$ sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

您可以使用此正则表达式 提取不应以其他方式计算或处理的序列。

另一个有趣的项目,对您有用 是ansifilter