ANSI 색상으로 파일 표시 터미널과 같이

ANSI 색상의 파일이 있습니다.

test.txt :
\e[0;31mExample\e[0m

이 파일의 내용을 터미널과 같이 터미널 cat에 표시하고 싶지만 색상도 표시하고 싶습니다.



답변

이 정확한 bash 질문에 대한 해결책을 찾고있었습니다. 나는 @Thomas Dickey의 의견을 거의 놓쳤으며 가장 우아한 솔루션을 제공했습니다.

echo -e $(cat test.txt)

나에게 효과가 없었던 것들이 있습니다 (물론 파이프 할 수 없습니다)

cat test.txt | echo -e

또는

less -R test.txt

내가 가진 또 다른 문제는 echo -e가 파일 내에서 줄 바꿈과 연속 공백을 멋지게 인쇄하지 않았다는 것입니다. 그것들을 인쇄하기 위해 다음을 사용했습니다.

echo -ne $(cat test.txt | sed  's/$/\\n/' | sed 's/ /\\a /g')

이것은 포함하는 test.txt 파일에서 작동합니다.

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m

답변

cat제어 문자 에서 색상이 보이지 않으면 손상되지 않았을 것입니다.

일부 도구는 제어 문자를 제거하지만 꼬리 끝은 그대로 둡니다.

비교:

 echo -e "\e[0;31mExample\e[0m foo"

 echo -e "[0;31mExample[0m foo" 

사용하는 정규 표현식이 실수로 의도하지 않은 문자 시퀀스 등을 가져올 수 있으므로 바보 같은 증거는 아니지만 제어 시퀀스를 왼쪽에서 다시 작성할 수 있습니다. 그러나 예를 들면 다음과 같습니다.

echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"

예제 문자열에 색상을 복원합니다.


답변

기본적으로 작동합니다. 예를 들어 ls --color=always > /tmp/a및보다 작 으면 cat /tmp/a색상이 표시됩니다. 확인 od하면 파일이 ANSI 색상을 사용하는지 확인합니다.

따라서 터미널이 ANSI 색상을 지원하는지 (및 활성화되어 있는지) 확인해야한다고 생각합니다.