2014-11-22 3 views
6

मैं एक फ़ाइल में मिलान लाइनों को खोजने के लिए grep को एक बैश स्क्रिप्ट में उपयोग करना चाहता हूं, रंगों के साथ मिलान को हाइलाइट करें, और फिर column कमांड का उपयोग करके परिणामों को तालिका में प्रिंट करें। कुछ इस तरह:परिवर्तनीय या पाइपिंग को किसी अन्य कमांड में संग्रहीत करते समय grep रंग को कैसे बनाए रखें?

data=`cat file.data | egrep -i --color "$search"` 
echo $'\n'"col1"$'\t'"col2"$'\t'"col3"$'\t'"col4"$'\n'"$data" | column -t -s$'\t' 

रूप कि रंग खो दिया है को छोड़कर वांछित, ऊपर कोड सब कुछ करता है।


यहाँ एक सरल उदाहरण है:

enter image description here

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


क्या मैं पूछ रहा हूं कि ऐसा करने का कोई तरीका है?

उत्तर

5

विकल्प --color=always का उपयोग करें:

data=$(egrep -i --color=always "$search" file.data) 

डिफ़ॉल्ट रूप से, grep रंग जब तक उत्पादन एक टर्मिनल के लिए सीधे जा रहा है का उत्पादन नहीं करता। यह आमतौर पर एक अच्छी बात है। विकल्प --color=always उस पर ओवरराइड करता है।

अवसरों के लिए जब आप रंग नहीं चाहते हैं, तो --color=never का उपयोग करें।

संबंधित मुद्दे