แสดงไฟล์ด้วยสี ANSI


12

ฉันมีไฟล์ที่มีสี ANSI

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

ฉันต้องการแสดงเนื้อหาของไฟล์นี้ในเทอร์มินัลเหมือนcatกัน แต่ต้องการแสดงสีด้วย


4
ใช้less -Rตัวอย่างเช่น
Thomas Dickey

catงานพิมพ์ของคุณคืออะไร
techraf

1
คำถามของ OP มีคำตอบที่เป็นไปได้มากมายที่จะน่าสนใจ echo -e $(cat test.txt)เริ่มต้นด้วย
Thomas Dickey

คำตอบ:


10

ฉันกำลังมองหาวิธีการแก้ปัญหาทุบตีนี้แน่นอน ฉันเกือบพลาดความเห็นของ @Thomas Dickey ซึ่งทำให้ฉันมีทางออกที่ดีที่สุด

echo -e $(cat test.txt)

บางสิ่งที่ไม่ได้ผลสำหรับฉันคือ (เห็นได้ชัดว่าคุณไม่สามารถสะท้อนสิ่งต่าง ๆ ได้)

cat test.txt | echo -e

หรือ

less -R test.txt

อีกประเด็นที่ฉันมีคือเสียงก้อง -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 ครั้งที่สองของคุณsed 's/ /\\033\\a /g'ซึ่งไม่ส่งเสียงกริ่ง
เหยี่ยว

1
หลังจากการทดสอบต่อไปและหาไม่สอดคล้องกันมากขึ้นในโปรแกรมขั้วที่แตกต่างกัน (iTerm อะตอม / นิวไคลด์) ฉันได้พบมันที่ดีที่สุดที่จะเพียงแค่ห่อ$(cat file.txt)ในราคาคู่และเพิ่มขึ้นบรรทัดใหม่ในตอนท้าย - ไม่จำเป็นสำหรับ sed - ดังนั้น: หรือecho -ne "$(<file.txt)" \\n echo -ne "$(cat <<"EOF" . . . EOF)" \\nนอกจากนี้ยังป้องกันไม่ให้ทุบตีทำการขยายแบบกลมในข้อความ
เหยี่ยว

1

หากคุณไม่เห็นสีจากcatตัวควบคุมอาจไม่เป็นอันตราย

เครื่องมือบางตัวดึงเอาอักขระควบคุมออกมา แต่ทิ้งไว้ที่ปลายหาง

เปรียบเทียบ:

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

ถึง

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

คุณอาจจะสามารถสร้างลำดับการควบคุมจากสิ่งที่เหลืออยู่ได้ แต่มันไม่ได้เป็นข้อพิสูจน์ที่ผิดเพราะ regex ที่คุณใช้อาจดึงลำดับของอักขระที่ไม่ได้ตั้งใจ ฯลฯ แต่ตัวอย่างเช่น:

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
สิ่งนี้ไม่ได้ตอบคำถาม
Thomas Dickey

1
ไม่น้อย -R แก้ไขปัญหาให้ฉันจริง ๆ
Ken Ingram
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.