ESC[xC
ANSIモーションコードを含むファイルがあり、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 $_}'