रंग को स्विच करना पाठ में एम्बेडेड एस्केप सीक्वेंस के माध्यम से किया जाता है । वास्तव में , कार्यक्रम एएनएसआई से बचने के क्रम जारी करते हैं , क्योंकि आजकल लगभग सभी टर्मिनल समर्थन करते हैं।
भागने के क्रम को लाल रंग में बदलने के लिए भागने का क्रम है \e[31m
, जहां \e
एक भागने चरित्र (ओक्टल 033, हेक्साडेसिमल 1 बी, जिसे ईएससी, ^[
और विभिन्न अन्य पदनाम भी कहा जाता है ) को नामित करता है। 30-39 की संख्या में अग्रभूमि रंग सेट करें; अन्य संख्याएँ अलग-अलग विशेषताएँ निर्धारित करती हैं। \e[0m
सभी विशेषताओं को उनके डिफ़ॉल्ट मान पर रीसेट करता है। cat -v
प्रोग्राम क्या प्रिंट करता है यह जाँचने के लिए चलाएँ , यह कुछ वैरिएंट का उपयोग कर सकता है जैसे कि \e[0;31m
पहले सभी विशेषताओं को रीसेट करने के लिए, या \e[3;31
इटैलिक को भी स्विच करना (जो कई टर्मिनल समर्थन नहीं करते हैं)।
Ksh, bash या zsh में, आप $'…'
बैकस्लैश को कोट्स के अंदर भागने में सक्षम करने के लिए उपयोग कर सकते हैं , जिससे आप $'\e'
एक एस्केप कैरेक्टर प्राप्त कर सकते हैं। ध्यान दें कि फिर आपको किसी भी बैकस्लैश को दोगुना करना होगा जिसे आप पास करना चाहते हैं grep
। में /bin/sh
, आप "$(printf \\e)"
एक शाब्दिक बच चरित्र का उपयोग या टाइप कर सकते हैं ।
जीएनयू grep -o
विकल्प के साथ, निम्नलिखित स्निपेट लाल पाठ को फ़िल्टर करता है, यह मानते हुए कि यह एस्केप अनुक्रम से शुरू होता है \e[31m
, \e[0m
या तो या \e[30m
उसी लाइन पर समाप्त होता है , और इसमें कोई एम्बेडेड एस्केप अनुक्रम नहीं होता है।
grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'
निम्नलिखित awk
स्निपेट लाल टेक्स्ट को निकालता है, तब भी जब वह मल्टीलाइन हो।
awk -v RS='\033' '
match($0, /^\[[0-9;]*m/) {
color = ";" substr($0, 2, RLENGTH-2) ";";
$0 = substr($0, RLENGTH+1);
gsub(/(^|;)0*[^03;][0-9]*($|;)/, ";", color);
red = (color ~ /1;*$/)
}
red'
यहां एक भिन्नता है जो रंग बदलने वाली आज्ञाओं को बनाए रखती है, जो कि यदि आप कई रंगों (यहां लाल और मैजेंटा) को फ़िल्टर कर रहे हैं तो उपयोगी हो सकता है।
awk -v RS='\033' '
match($0, /^\[[0-9;]*m/) {
color = ";" substr($0, 2, RLENGTH-2) ";";
printf "\033%s", substr($0, 1, RLENGTH);
$0 = substr($0, RLENGTH+1);
gsub(/(^|;)0*[^03;][0-9]*($|;)/, ";", color);
desired = (color ~ /[15];*$/)
}
desired'
>&1
? मेरा मतलब है, लाल सामान दूर नहीं जाता है यदि आप2>/dev/null
, ठीक है?