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 색상을 지원하는지 (및 활성화되어 있는지) 확인해야한다고 생각합니다.