ANSI 이동 문자 ESC[xC 및 ESC[xD]가 포함된 텍스트를 파이프하고 해당 형식으로 텍스트를 출력하는 방법

ANSI 이동 문자 ESC[xC 및 ESC[xD]가 포함된 텍스트를 파이프하고 해당 형식으로 텍스트를 출력하는 방법

ESC[xCANSI 모션 코드 가 포함된 파일이 있는데 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 $_}'

관련 정보