मैं grep इनपुट के साथ रंग कोड कैसे रख सकता हूं?


15

अगर मैं दो लगातार grepआदेशों का उपयोग करता हूं , जैसे:

echo "foo bar" | grep foo | grep bar

तब पहला पैटर्न ("फू") हाइलाइट नहीं किया गया है। वास्तव में, ऐसा लगता है कि grep अपने इनपुट से रंग कोड हटाता है। क्या इसे रोकने का कोई तरीका है?


उसी जवाब के साथ एक और सवाल: आप एक bash फ़ंक्शन के भीतर एक grep को रंगीन आउटपुट कैसे पुनर्स्थापित कर सकते हैं?
केमिली गौडेय्यून

जवाबों:


23

का उपयोग करें --color=always

grepपता लगाता है कि आउटपुट एक पाइप (या फ़ाइल) के लिए है। जब आप आउटपुट फाइल करना चाहते हैं, तो आप कभी भी रंग नहीं चाहते - जैसे कि टर्मिनल के लिए एस्केप सीक्वेंस हैं। आमतौर पर:

foo ^[[01;31m^[[Kbar^[[m^[[K

उदाहरण के लिए:

grep pattern file > result

उपयोग को ओवरराइड करने के लिए --color=always

grep --color=always pattern file | ...

उदाहरण:

फ़ाइल होना:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

फिर

grep --color=always ID file | grep --color=always 2013 | grep foo

रंग होगा ID, 2013और foo

grep --color=always ID file | grep 2013 | grep foo

रंग IDऔर होगा foo, लेकिन नहीं 2013

1 महत्वपूर्ण: आपको यह भी याद रखना होगा किरंगों सेजोड़ा अव्यवस्था श्रृंखला में अगले आदेश तक पारित हो जाती है। एक बार आईडी रंगीन होने के बाद, आप (आसानी के साथ), उदाहरण के लिए मैच नहीं कर सकतेID=111


किसी अवसर पर शायद कोई टर्मिनल रंग फ़ाइल में चाहेगा । जैसे प्रयास करें

 grep --color=always foo file > result
 cat result

हालाँकि परिणामी फ़ाइल में बहुत सीमित पोर्टेबिलिटी होगी।


रंग खुद भी एक विस्तार है।


जैसा कि अच्छे @slm द्वारा बताया गया है , आप जोड़ सकते हैं:

export GREP_OPTIONS="--color=always"

अपने .bashrcआदि के लिए, लेकिन जब तक आप किसी कारण से वास्तव में निहितार्थ को नहीं समझते हैं और तब भी ऐसा करना चाहते हैं। यह 1 सेgrep ऊपर वर्णित तथ्य के कारण कई तरह से टूट जाएगा

aliasयदि आप इसे अक्सर उपयोग करते हैं तो जोड़ें ।

 alias cgrep='grep --color=always'

GREP_OPTIONSऔर --color तीन विकल्प ले : never, autoऔरalways । पहले दो को ही माना जाना चाहिए GREP_OPTIONS

तुम भी बाहर की जाँच कर सकता है GREP_COLORSमें manपृष्ठों या पर जीएनयू ग्रेप


: इस तरीकों पेशेवरों / विपक्ष यहाँ पर अतिरिक्त विवरण stackoverflow.com/questions/867877/...
SLM

1
इसे उत्तर में भी जोड़ें: export GREP_OPTIONS="--color=always"a .bashrc विकल्पों को किसी भी greps के लिए चूक बनाता है, और आपने इसे बहुत अधिक लाभ लिया है!
SLM

इस सुपर Uuser क्यू एंड ए में अच्छी चीजें: superuser.com/questions/36022/...
SLM

"grep पता लगाता है कि आउटपुट एक पाइप के लिए है" - अहा! यह कुंजी है, अगर यह एक पाइप का हिस्सा है तो grep रंग नहीं कर रहा है। इस तरह की चीज़ के खिलाफ एक प्रतिस्थापन सिद्धांत होना चाहिए: - /
क्रिस 2048

@ क्रिस 2048: टर्मिनल के लिए रंगों को प्रिंट करने वाले अधिकांश उपकरणों के लिए यह मानक है। आप इसके द्वारा कुछ और विवरण पा सकते हैं , यह कैसे पता चला है, और यह कुछ मुद्दों को दिखाता है जैसे OSX देशी lsऔर ग्नू कोरुटिल्स पर ls और कलर्स ।
रनियम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.