जीआरईपी से पाइपिंग के बाद रंग को संरक्षित करना


140

Grep'ing के बाद Preserve ls color में एक simlar सवाल है, लेकिन यह मुझे गुस्सा दिलाता है कि यदि आप एक और grep में रंगीन grep आउटपुट को पाइप करते हैं तो वह रंग संरक्षित नहीं होता है।

एक उदाहरण के रूप grep --color WORD * | grep -v AVOIDमें पहले आउटपुट का रंग नहीं रखता है। लेकिन मेरे ls | grep FILEलिए रंग रखना, अंतर क्यों?


2
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह यूनिक्स कमांड के उपयोग के बारे में है, unix.stackexchange.com
— रैप्टर

जवाबों:


162

grepकभी-कभी रंग आउटपुट को अक्षम कर देता है, उदाहरण के लिए जब एक पाइप पर लिखते हैं। आप इस व्यवहार को ओवरराइड कर सकते हैंgrep --color=always

सही कमांड लाइन होगी

grep --color=always WORD * | grep -v AVOID

यह सुंदर क्रिया है, वैकल्पिक रूप से आप बस लाइन जोड़ सकते हैं

alias cgrep="grep --color=always"

आपके लिए .bashrcउदाहरण और उपयोग के लिए cgrepरंग का ग्रेप के रूप में। जब grepआप पुन: परिभाषित करते हैं, तो आप उन स्क्रिप्ट्स के साथ परेशानी में पड़ सकते हैं जो विशिष्ट आउटपुट पर निर्भर करती हैं grepऔर एएससीआई एस्केप कोड पसंद नहीं करती हैं।


4
यह समाधान केवल कुछ भाग्यशाली परिस्थितियों में काम करता है। नीचे andersonvom का उत्तर देखें।
— स्टडॉग

मेरे मामले में (उबंटू) मैं पहले से ही उर्फ ​​था grep। alias grep='grep --color=autoइसलिए मुझे केवल अपने स्थान को बदलने की आवश्यकता है ~/.bashrcजहां इसे पहली जगह में परिभाषित किया गया था।
— sobi3ch

मेरे लिए काम नहीं - इस परिदृश्य के समान है stackoverflow.com/a/7640077/248616
— Nam G VU

यह अच्छा रचनात्मक विचार सिर्फ सरल है और काम कर रहा है stackoverflow.com/a/36288791/248616
— Nam G VU

सवाल यह है कि कैसे दूसरे grep को पहले वाले के रंग से अलग नहीं किया जाए। यह उस का जवाब नहीं है।
— जोहान्स_लाल

74

सलाह का एक शब्द:

उपयोग करते समय grep --color=always, अगले पाइप पर पारित होने वाले वास्तविक तारों को बदल दिया जाएगा। यह निम्न स्थिति पैदा कर सकता है:

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

भले ही विकल्प -ve '12'को बीच की रेखा को बाहर करना चाहिए, यह नहीं होगा क्योंकि इसमें 1और के बीच रंग वर्ण हैं 2।


यदि आप उपयोग करते हैं --color=auto, तो यह इस तथ्य को उठाना चाहिए कि आप इसे कहीं और पाइप कर रहे हैं और रंगों को पूरी तरह से दबाते हैं, लेकिन यह उद्देश्य को हरा देता है। यदि आप अभी भी रंगीन परिणाम चाहते हैं, तो मुझे लगता है कि आप अंतिम पाइप का उपयोग करके इसे फिर से पकड़ सकते हैं --color।
— andersonvom

2
मैक ओएस एक्स पर, कम से कम, @andersonvom के रूप में आखिरी पाइप पर रंग काम नहीं करता है। यकीन नहीं है कि क्यों; शायद यह बहिष्कृत पैटर्न को रंग रहा है? --color=alwaysकाम करता है, के साथ, मुझे लगता है, ऊपर कहा गया है।
— user766353

3
आपकी अभिव्यक्ति में दो बार समान grep पैटर्न होना चाहिए। मैंने अभी इसे एक मैक पर परीक्षण किया है: http://i.imgur.com/BhmwAlF.png
— andersonvom

9

बस अपने पाइप के अंत में उसी grep कमांड को दोहराएं।
grep WORD * | grep -v AVOID | grep -v AVOID2 | grep WORD


2
क्या आदेशों को उलट देना एक ही परिणाम प्रदान नहीं करेगा? grep -v AVOID * | grep WORD
— ब्रायनन गिब्सन

@BrydonGibson शायद, लेकिन यह दिखाने के लिए एक उदाहरण था कि यह किसी भी संख्या में पाइप्ड कमांड के लिए काम करता है
— एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.