स्क्रीनशॉट मैंगल्ड ANSI रंग कोड दिखाता है , जो टेक्स्ट रेंडरिंग को नियंत्रित करता है। बोल्ड / उज्ज्वल टेक्स्ट को अनुक्रम के साथ निर्मित किया जाता है ␛[1m
, जिसे आमतौर पर आपके टर्मिनल द्वारा व्याख्या किया जाता है और सीधे स्क्रीन पर प्रदर्शित नहीं किया जाता है: यह सिर्फ पाठ के अगले बिट को उज्ज्वल बनाता है। अन grep
पैड आउटपुट का स्क्रीनशॉट दिखाता है कि प्रत्येक लाइन पर लेबल और मानों के बीच का रंग अंतर है, इसलिए मूल आउटपुट उनका उपयोग कर रहा है।
ऐसा प्रतीत होता है कि यह क्रम आपके फाइनल से टूट गया है grep
, जो कोड में "एम" से मेल खाता है (क्योंकि यह एक पत्र है [a-z]
) और इसे लाल रंग में ही उजागर करने का प्रयास किया गया है। इसने एक आंशिक भागने का क्रम पीछे छोड़ दिया, जिसे आपका टर्मिनल संसाधित नहीं कर सकता था।
भागने का चरित्र ␛
U + 001B है, जो हेक्साडेसिमल संख्या है जो अज्ञात-चरित्र बक्से में प्रदान की जाती है। जो प्रदर्शित होता है वह है पलायन (बॉक्स), ए [
, एक 1
लाल, m
जिसके बाद अपेक्षित मिलान पाठ "एनजी", और "22" ("सामान्य रंग और तीव्रता के लिए संख्यात्मक कोड") के साथ अंत में वही हो रहा है।
टूटी हुई आउटपुट वास्तव में है:
␛ [1 ␛ [31 एम मेंग ␛ [22M ␛ [22 ␛ [31 एम एम ␛ [22M
जहां ␛[31m
पाठ लाल बनाता है और ␛[22m
इसे वापस सफेद में बदल देता है, दोनों को मूल पाठ में वर्णों के grep
आसपास डाला जाता है m
। मूल बस था:
Eng [1m eng eng [22m
जो अभी उज्ज्वल है " eng
" और फिर सामान्य पाठ पर वापस आ जाता है।
आप अपने फ़ाइनल grep
को बदलकर grep --color=always
और इसमें पाइपिंग करके इसकी जाँच कर सकते हैं hexdump
, जो आपके टर्मिनल द्वारा व्याख्या किए गए सभी अचूक पात्रों और लोगों को दिखाएगा।
आप इससे कुछ तरीकों से निपट सकते हैं। एक grep
पल के लिए अपने उपनाम के बिना उपयोग करने के लिए है:
./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
बैकस्लैश अस्थायी रूप से उर्फ को छोड़ देता है और grep
सीधे चलता है।
मूल कमांड से एएनएसआई कोड को अलग करना है, जिसके लिए इस प्रश्न में कुछ सुझाव हैं :
./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
फिर भी एक अन्य विकल्प अंत में एक बाहरी पाइप जोड़ना है:
./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
क्योंकि अंतिम grep
उत्पादन सीधे TTY के लिए नहीं है, लेकिन cat
एक पाइप के माध्यम से, यह रंगीन हाइलाइटिंग सम्मिलित नहीं करेगा।
शायद सबसे अच्छा विकल्प पहली बार में टर्मिनल नियंत्रण अनुक्रमों का उपयोग करने से रोकने के लिए अनुवाद शेल प्राप्त करना है, जब यह टर्मिनल के लिए नहीं है। यह आपके लेखक (ओं) को एक बग रिपोर्ट को ठीक से शामिल करेगा और अनुवाद शेल के ansi()
फ़ंक्शन के लिए एक कोड फिक्स करेगा , लेकिन कोई भी इसे डाउनलोड कर सकता है:
TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
यह dumb
अनुवाद शैल के वातावरण में टर्मिनल प्रकार से गुजरता है, जिसे कम से कम ईसीएमए -48 रंग समर्थन नहीं होने के रूप में मान्यता देता है। (अफसोस की बात है कि ट्रांसलेशन शेल टर्मोफाइ का उपयोग नहीं करता है, और केवल अपने ही कोड के हार्डवेयर्स में टर्मिनल प्रकार जो इसे समझता है और नियंत्रण अनुक्रमों का उपयोग करता है।)