如何通过管道传输包含 ANSI 移动字符 ESC[xC 和 ESC[xD] 的文本并输出相应格式的文本

如何通过管道传输包含 ANSI 移动字符 ESC[xC 和 ESC[xD] 的文本并输出相应格式的文本

我有包含 ANSI 运动代码ESC[xCESC[xD.我想过滤掉这些,但每行输出都考虑到这些代码。

考虑这一行:

this cat is greenESC[12DdogESC[4Cwhite

我希望将其输出为

this dog is white

以上ESC表示转义码\0x1b(或\033)。

答案1

我确信有更好的方法(并且我确信有更好的 Perl),但这似乎可以解决问题:

perl -M5';$e="\x1b";' -lne 'chomp;if(/$e\[\d+[CD]/){$ns="";$p=0;while(/$e\[(\d+)([CD])/g){if(!$ns){$ns=$`;$p=length($ns)}$p+=($2eq"C"?+$1:-$1);($a=$'"'"')=~s/(^[^$e]+).*/$1/;if($a=~/^[^$e]/){substr($ns,$p,length($a),$a);$p+=length($a)}}print $ns}else{print $_}'

相关内容