如果您要打印字符串“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
...用管道输出前面显示的字符串。
在编辑流时,为了计算,替换,保存等目的,如何匹配转义码?
答案 0 :(得分:1)
这可能不完全是, 你在寻找什么,但你可以进一步发展这个想法:
您可以删除控制字符
使用col
:
$ col -bx
或使用sed
:
$ sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
您可以使用此正则表达式 提取不应以其他方式计算或处理的序列。
另一个有趣的项目,对您有用 是ansifilter。