![ANSI 이동 문자 ESC[xC 및 ESC[xD]가 포함된 텍스트를 파이프하고 해당 형식으로 텍스트를 출력하는 방법](https://linux55.com/image/225809/ANSI%20%EC%9D%B4%EB%8F%99%20%EB%AC%B8%EC%9E%90%20ESC%5BxC%20%EB%B0%8F%20ESC%5BxD%5D%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%ED%8C%8C%EC%9D%B4%ED%94%84%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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 $_}'