bash

2013-10-10 8 views
10

का उपयोग कर एक टेक्स्ट फ़ाइल से एएनएसआई रंग कोड हटाएं मेरे पास एक बैश स्क्रिप्ट है जो पाठ फ़ाइल को चलाती है और आउटपुट करती है, हालांकि इसका उपयोग करने वाले रंग कोड भी शामिल हैं जिन्हें मैं जानना चाहता हूं कि उन्हें फ़ाइल से कैसे निकालना है यानीbash

^[[38;1;32mHello^[[39m 
^[[38;1;31mUser^[[39m 

तो मैं बस इस समस्या को हल करता है नमस्ते और उपयोगकर्ता

+0

संबंधित जवाब अजगर का उपयोग कर: http://stackoverflow.com/questions/14693701/how-can-i-remove -the-ansi-escape-sequences-from-a-string-in-python – GreyCat

+2

डुप्लिकेट: http://unix.stackexchange.com/questions/4527/program-that-passes-stdin-to-stdout-with-color -कोड्स-स्ट्रिपेड – GreyCat

उत्तर

1

साथ छोड़ दिया जाना चाहते हैं?

$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g' 
Hello 

चीयर्स !! ESC[#;#H or ESC[#;#f चाल # लाइन कर्सर स्तंभ # ESC[2J साफ स्क्रीन और घर कर्सर ESC[K स्पष्ट:

+0

नहीं, ऐसा नहीं है, क्योंकि '^ [' ASCII एस्केप कैरेक्टर (कंट्रोल- [, कोड 27) का प्रतिनिधित्व करता है। – Armali

+0

@ अरमाली: अपने बिंदु को समझें नहीं। ओपी की आवश्यकता के अनुसार, यह काम करना चाहिए। क्या आप एक उदाहरण पोस्ट कर सकते हैं जहां यह काम नहीं करता है? चीयर्स !! – MacUsers

+0

हां ... 'TERM = xterm tput setf 1 | sed -e's/\^\ [\ [[0-9;] \ {2, \} m // g '| हेक्सडम्प-सी' – Armali

3
sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name 

इस आदेश फ़ाइल

से विशेष वर्ण और रंग कोड इन एएनएसआई कोड में से कुछ हैं निकालता है लाइन के अंत तक,

स्पष्ट कोड के मामले में नोट न तो संख्या है और न ही अर्धविराम ;

नीचे टिप्पणी से सहमत: यदि संख्या अधिक से अधिक 2 अंकों कृपया इस का उपयोग कर रहे हैं:

sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename 
+0

कोड में संख्या भागों की संख्या पर कोई गारंटी नहीं है, रंग बदलने के लिए उन लोगों को बिना किसी अनावश्यकता के 5 नंबर तक हो सकते हैं। अन्य सुविधाओं को सेट करने के लिए कोड (जैसे लिनक्स कंसिल घंटी आवृत्ति) में पंक्ति में 2 से अधिक अंक हो सकते हैं। – Jasen

+0

आपसे सहमत हैं Jasen :-) –