ANSI 색상으로 파일 표시


12

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

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

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


4
예를 들어을 사용 less -R합니다.
토마스 디키

당신의 cat인쇄 는 무엇입니까 ?
techraf

1
OP의 질문에 흥미로운 답변이 너무 많습니다. 로 시작하십시오 echo -e $(cat test.txt).
Thomas Dickey

답변:


10

이 정확한 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

좋은 대답이지만 \a저에게 종을 울립니다. sed 's/ /\\033\\a /g'벨을 울리지 않는 두 번째 sed 명령을 변경했습니다 .
호크

1
추가 테스트 및 다른 터미널 프로그램에 더 많은 불일치를 찾은 후 (사용하여 ITerm, 아톰 / 핵종), 난 그냥 랩에 그것을 최선을 발견했습니다 $(cat file.txt)따옴표와 말에 줄 바꿈 추가 - 나오지도에 대한 필요를 - 그래서 : echo -ne "$(<file.txt)" \\necho -ne "$(cat <<"EOF" . . . EOF)" \\n. 또한 bash가 텍스트에서 glob 확장을 수행하지 못하게합니다.
호크

1

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"

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


-1

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

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


1
이것은 질문에 대답하지 않았습니다.
토마스 디키

1
아니요-less -R은 실제로 문제를 해결했습니다.
Ken Ingram
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.