출력에서 색상 코드 제거 [중복]

출력에서 색상 코드 제거 [중복]

중복 가능성:
스크립트 출력에서 ​​제어 문자(콘솔 코드/색상 포함) 제거

나는 내가 작성하고 있는 프로그램과 함께 작동하기 위한 스크립트를 작성하고 있습니다. 내가 하고 싶은 것은 다른 스크립트를 사용하여 많은 클라이언트의 완료를 평가하는 것입니다. 내 스크립트는 내가 원하는 대로 거의 정확하게 작동하지만 나중에 XML을 PHP로 구문 분석할 때 문제를 일으키는 XML 출력에 일부 색상 상수가 삽입되어 있습니다. 간단히 말해서, 색상 상수의 첫 번째 부분을 제거하는 sed 표현식을 사용하고 있지만 ^[(B - 따라서 내 문제입니다.

이것은 내가 사용하고 있는 sed 시퀀스입니다:

sed -r 's/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g'

후행 시퀀스를 제거하기 위해 실행할 수 있는 별도의 sed 시퀀스가 ​​있는지 궁금합니다. 나는 사용해 보았습니다.

sed 's/\^\[\\(B//'

하지만 아무것도 삭제되지 않는 것 같습니다. 누군가가 매우 도움이 될 sed 및 색상 코드에 대한 좋은 가이드를 갖고 있다면 반드시 대답이 필요하지는 않습니다. 나는 그것을 봤지만 내가 찾은 답변은 색상의 시작 부분을 제거하는 것 같습니다.

당신의 도움을 주셔서 감사합니다.

답변1

ANSI 이스케이프 코드는 ESC또는 문자 \033색상 코드(그 하위 집합)로 시작합니다. \033[Xm여기서 X는 세미콜론으로 구분된 숫자 목록으로 비어 있을 수 있습니다(재설정을 의미함). m은 문자 그대로의 m입니다.

나 자신이 이 코드들을 계속 잊어버리기 때문에, 나는 그것을 "기록"했다.https://github.com/seveas/hacks/blob/master/ansi.py.

sed 표현식에 관해서는 다음을 선택하겠습니다.s/\x1B\[[0-9;]*[JKmsu]//g

답변2

Perl로 할 수 있습니다.

#!/usr/bin/env perl

# catch the output of some command
my $output = `command`;

# remove only color codes
$output =~ s/\e\[[\d;]*m//g;

# or remove all ANSI escape sequences
# $output =~ s/\e\[?.*?[\@-~]//g

print "$output","\n";

관련 정보