표준 출력에서는 색상을 유지하되 티셔츠에서는 제거하세요.

표준 출력에서는 색상을 유지하되 티셔츠에서는 제거하세요.

콘솔의 표준 출력에서 ​​색상 출력을 보고 싶지만 tee명령 출력의 캡처된 복사본에서 이를 제거하고 싶습니다. 나는

표준 출력에 색상을 쓰는 명령|티문서

파일에 ANSI 색상 시퀀스 등이 없어야 합니다. 그러면 grep나중에 로그 파일이 흥미로워질 것이기 때문입니다.

echo -e "color \033[1;31mRED\033[0m output" | tee test.log

이 경우 색상은 콘솔과 "test.log" 파일에 기록됩니다.

color ^[[1;31mRED^[[0m output

tee파일 출력 에 대해서만 ANSI 시퀀스를 제거하는 방법이 있습니까 ?

내 터미널을 보려고 티를 얻으려고 하면 색상(환경 변수, 하위 쉘)에 대해 모르지만 tee그것이 나에게 준 것을 행복하게 썼습니다. 나는 콘솔 출력의 색상(사람이 소비하기에 좋음)을 원하지만 출력의 로그 파일 복사본 색상은 원하지 않습니다.

echo -e "color \033[1;31mRED\033[0m output" | TERM=dumb tee test.log ; od -c test.log

많은 사람들을 찾았어요생각하다"파이프 투 티(piped to tee)" 출력에서 ​​색상 코드를 사용하지만(보통 첫 번째 프로그램이 색상을 표시할 수 있는 것을 알고 있는 경우) 그 반대의 질문/답변을 찾지 못했습니다.

답변1

Bash를 사용하는 경우 다음 명령을 사용하여 모든 색상을 제거할 수 있습니다(그래픽 재생).

echo -e "color \033[1;31mRED\033[0m output" | tee >(sed $'s/\033[[][^A-Za-z]*m//g' > test.log)

또는모두ANSI 이스케이프 시퀀스

echo -e "color \033[1;31mRED\033[0m output" | tee >(sed $'s/\033[[][^A-Za-z]*[A-Za-z]//g' > test.log)

(이것을 테스트했지만 완전하지는 않습니다.)

PS 로그 파일에 추가하려면 >> test.log괄호 안에 추가하세요 tee -a.

답변2

zsh, 및 ansi2txt에서컬러 로그1:

표준 출력에 색상을 쓰는 명령>&1 > >(ansi2txt >문서)

zsh는 fd가 쓰기를 위해 여러 번 리디렉션될 때 tee와 유사한 동작을 구현합니다.


¹ 동일한 이름의 패키지로 Debian/Ubuntu에서 찾을 수 있지만 참고하세요.알고리즘이 상당히 조악하다, 바라보다스크립트 출력에서 ​​제어 문자(콘솔 코드/색상 포함) 제거더 미세하고 더 단단할 수 있는 컬러 필터의 경우.

관련 정보