एक अलग रंग के साथ कीवर्ड की घटनाएँ


13

मेरे पास एक प्रोग्राम है जो आउटपुट को stdoutपसंद करता है:

[OK]      Something is ok
[OK]      Something else is also ok
[FAIL]    This does not look good
[FAIL]    Neither does this
[OK]      At least this is fine

आउटपुट से अधिक आसान स्थान के लिए मैं अन्य संदेशों को छोड़ने के बिनाFAIL लाल के साथ कीवर्ड की घटनाओं को चिह्नित करना चाहूंगा । यह अच्छा होगा अगर मैं हरे रंग के साथ कीवर्ड भी उजागर कर सकता हूं :)।OK

एक पाइप करने के egrep --color FAILलिए केवल वही लाइनें दिखाई देंगी जहाँ FAILकीवर्ड मौजूद है।


1
एक grepसमाधान के लिए unix.stackexchange.com/a/34322
manatwork

क्या आपके पास स्रोत कोड बदलने के लिए एक्सेस है? क्या यह बैश स्क्रिप्ट है?
h3rrmiller 16

@manatwork आपके द्वारा बताए गए लिंक से मैंने stackoverflow.com/questions/972370 पर अपना रास्ता क्लिक किया और कुछ tail -fऔर awkजादू के साथ, मुझे जाने के लिए अच्छा है =)
थियोडोर

जवाबों:


10

manatworkदूसरे सवाल में "शानदार लिटिल" या कुछ भी नहीं "हैक" के आधार पर , मैं यह पेशकश करता हूं, जो दो हाइलाइट रंग प्राप्त करने की क्षमता जोड़ता है :

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'

यही है, आप हर बार grepएक अलग GREP_COLORSपर्यावरण चर के साथ दो बार आउटपुट पर चलते हैं ।

'01; 32 'का अर्थ "बोल्ड ग्रीन" है, और दूसरे का अर्थ "बोल्ड रेड" है। अधिक विचारों के लिए ANSI कोड पर विकिपीडिया लेख देखें ।

काश, इसके लिए GNU grep संस्करण 2.5.3 या उच्चतर की आवश्यकता होती है। जीएनयू जीआरईपी के पुराने संस्करणों ने एक अलग रंग तंत्र का समर्थन किया, लेकिन उन संस्करणों में एक बग है जो आपको एक बार से अधिक पाइप लाइन में सुविधा का उपयोग करने से रोकता है। बीएसडी grep पुराने GNU grep रंग तंत्र का अनुकरण करता है, और यह एक पाइपलाइन में दो बार काम करेगा, लेकिन यह manatworkहैक के कारण "खाली उप-अभिव्यक्ति" के बारे में चिल्लाता है ।

आप पहली दो पंक्तियों के अंत में बैकस्लैश निकाल सकते हैं ताकि यह एक एकल पंक्ति बन सके। मैंने अभी इसे स्पष्टता के लिए और एसई पृष्ठ प्रारूप के साथ अच्छा खेलने के लिए यहाँ विभाजित किया है।


वास्तव में शानदार! लेकिन किसी कारण से स्क्रिप्ट मेरे मशीन पर दूसरे कथन को उजागर नहीं करती है। मैं CentOS 5 चला रहा हूँ
थिओडोर

2
यहाँ क्या हो रहा है कि CentOS 5 एक GNU grep काफी पुराना है कि यह GREP_COLORSबहुवचन का समर्थन नहीं करता है । यह GREP_COLORकेवल पुराने तरीके का उपयोग करता है , और उस विधि में एक बग होता है जो इसे सही काम करने से रोकता है। यदि आप उपयोग करने के लिए कमांड बदलते हैं GREP_COLOR=32और इस तरह, यह केवल पहले मैच के हाइलाइट रंग को बदल देगा। यदि आप परिणाम को पाइप करते हैं तो आप hexdump -cदेख सकते हैं कि दूसरी egrepकमांड को जोड़ने से कुछ होता है, लेकिन यह कानूनी ANSI नहीं है। निचला रेखा: आपको इसे grepसही काम करने के लिए अपग्रेड करना होगा।
वॉरेन यंग

हाहा, यह एक ऐसी ही आनंददायक टिप्पणी है। हाँ CentOS5 पुराने की तरह हो रहा है, कई OS के साथ: पुराने पर थूकने वाली पुरानी मशीन पर चल रहा है, भगवान लॉग इन संदेशों को छोड़ दिया है :) मैं यह देखने की कोशिश करूंगा कि क्या centos6 में अपग्रेड संभव नहीं है।
थियोडोर

मैंने अभी अपने समाधान को एक CentOS 6 बॉक्स पर चेक किया है, और यह वहाँ काम करता है , मेरे निदान की पुष्टि करता है । (पहले के परीक्षण उबंटू सर्वर पर थे।) GN6 grep 2.6.3 के साथ EL6 जहाज। दिलचस्प बात यह है कि, उन्होंने GREP_COLOR(एकवचन) बग को भी ठीक कर दिया था , भले ही यह सुविधा जल्द से जल्द हटा दी गई थी।
वॉरेन यंग

मैं नहीं समझ सकता कि यह समस्या कैसे हल करती है क्योंकि 1 grep सभी "FAIL" को फ़िल्टर कर देगा, इसलिए मैच के लिए दूसरे grep के लिए कुछ नहीं बचेगा ..
laertis

1

आप इसके लिए मल्टीटैल या ccze का उपयोग कर सकते हैं, दोनों कॉन्फ़िगरेशन को मैच और रंगों के लिए रेक्सएक्सप्स का वर्णन करने की अनुमति देते हैं।


1

वारेन यंग के जवाब के आधार पर, मैंने यह पायथन स्क्रिप्ट लिखी है जो एक ही काम को अधिक सुरुचिपूर्ण ढंग से और बहुत कम टाइपिंग के साथ करती है। तो यह है कि आप उस स्क्रिप्ट का उपयोग कैसे करेंगे:

cat yourfile | himul '\[OK\]' '\[FAIL\]'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.