我有包含 ANSI 运动代码ESC[xC
和ESC[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 $_}'