एएनएसआई रंगों के साथ फ़ाइल प्रदर्शित करें


12

मेरे पास एएनएसआई रंगों वाली एक फाइल है।

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

मैं इस फाइल की सामग्री को टर्मिनल में catप्रदर्शित करना चाहता हूं , जैसे करता है, लेकिन मैं रंगों को भी प्रदर्शित करना चाहूंगा।


4
less -Rउदाहरण के लिए, का उपयोग करना ।
थॉमस डिक्की

आपका catप्रिंट क्या है ?
techraf

1
ओपी के सवाल के दिलचस्प होने के कई संभावित उत्तर थे। से शुरू करें echo -e $(cat test.txt)
थॉमस डिकी

जवाबों:


10

मैं इस सटीक बैश प्रश्न का हल ढूंढ रहा था। मैंने लगभग @Thomas Dickey की टिप्पणी को याद किया, जिसने मुझे सबसे सुरुचिपूर्ण समाधान प्रदान किया।

echo -e $(cat test.txt)

कुछ चीजें जो मेरे काम नहीं आईं (जाहिर है कि आप पाइप की चीजों को गूंज सकते हैं)

cat test.txt | echo -e

या

less -R test.txt

मेरे पास एक और मुद्दा यह था कि इको-एन ने फाइल के भीतर नईलाइन और सन्निहित व्हाट्सएप नहीं छापे। उन को मुद्रित करने के लिए, मैंने निम्नलिखित का उपयोग किया।

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, Atom / nuclide) में अधिक विसंगतियों को खोजने के बाद, मैंने इसे केवल $(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 रंगों का उपयोग करती है।

इसलिए मुझे लगता है कि आपको जांचना चाहिए कि क्या आपका टर्मिनल एएनएसआई रंगों का समर्थन करता है (और वे सक्षम हैं)।


1
इस सवाल का जवाब नहीं दिया।
थॉमस डिकी

1
नहीं, कम -R ने वास्तव में मेरे लिए इस मुद्दे को हल किया।
केन इंग्राम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.