रंग के साथ एक फ़ाइल में एक grep के उत्पादन की बचत


36

मुझे एक grep कमांड के परिणाम को एक फ़ाइल में सहेजने की आवश्यकता है, लेकिन मैं यह भी चाहता हूं कि आउटपुट फ़ाइल को स्वरूपित किया जाए और टर्मिनल में रंगों को उसी तरह रखा जाए।

क्या ऐसा करने के लिए कोई रास्ता है? शायद कुछ प्रकार के मार्कअप भाषा को बचाने के लिए grep बनाते हैं? यदि यह संभव नहीं है, तो क्या कोई अन्य उपकरण है जो इस कार्य को पूरा कर सकता है?

मैं खोज फ़ाइल को आउटपुट फ़ाइल में बाहर खड़ा करने की कोशिश कर रहा हूं, ठीक उसी तरह जैसे टर्मिनल में करता है।

जवाबों:


42

मार्कअप रखने के लिए, आपको केवल एक पाठ फ़ाइल की आवश्यकता है। मैं रंगों को रखने के लिए HTML आउटपुट का उपयोग करता हूं।

  • " एचईएस कोड के लिए यूनिक्स टर्मिनल के एएनएसआई एस्केप सीक्वेंस को धर्मान्तरित" करने के लिए अहा को स्थापित करें "

    sudo apt-get install aha
  • फिर अपना grep(या ls) आउटपुट इस तरह सेव करें :

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html

    विकल्प:

    --black param to set background as black color
    --title param to set the title for HTML page

फ़ाइल एक्सटेंशन के माध्यम से सिंटैक्स हाइलाइट करें pygmentize

  • स्थापित करें pygmentize:

    sudo apt-get install python-pygments
  • फिर इस तरह की कमांड चलाएं:

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html

यहाँ छवि विवरण दर्ज करें


1
अहा !! , अहा वास्तव में एक अद्भुत उपकरण है, वास्तव में मैं क्या देख रहा था, धन्यवाद !!
अल्माइटी कैमल

2
@ Mhd.Tahawi: मैंने अपना उत्तर अपडेट कर दिया है ताकि आप कोड रंग (आपके मामले में प्रभावित) रख सकें, लेकिन pygmentizeकई अन्य लोगों के साथ काम करता है।
सिल्वेन पिनेउ

10

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

grep --color=always "stuff" input.txt > output.txt

अब, जब आप फ़ाइल को कंसोल पर प्रिंट करते हैं तो इसे रंगों के साथ प्रिंट किया जाएगा, क्योंकि बैश उन वर्णों की व्याख्या करता है जैसे "इस रंग का उपयोग करें"।

cat output.txt

हालाँकि, यदि आप इसे एक संपादक की तरह खोलते हैं vim, तो आपको कुछ अजीब अक्षर मिलेंगे। उदाहरण के लिए, जब मैं कमांड का उपयोग करता हूं

echo "A sentence. A red sentence. Another sentence." \
  | grep --color=always "A red sentence" > output.txt

जब मैं इसे उपयोग करके प्रिंट करता हूं तो आउटपुट सही लगता है, catलेकिन जब मैं इसे खोलता vimहूं तो प्राप्त होता है

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

इसलिए यदि आप एक संपादक का उपयोग करना चाहते हैं तो यह वह नहीं है जो आप चाहते हैं।


सही !!, मुझे उन अजीब प्रतीकों के बीच में मिल रहा था और समझ में नहीं आया कि वे क्या हैं।
मोहन अलमाइटी ऊंट

मुझे वास्तव में यह पसंद है कि आपका उत्तर कितना सरल / प्रभावी है। बस उत्पादन :)। यह अल्पावधि के लिए बहुत अच्छा है (अभी मेरे लिए काफी अच्छा है)।
ट्रेवर बॉयड स्मिथ

विवरण: यह टर्मिनल (एमुलेटर) है, न कि बैश, जो कलर एस्केप सीक्वेंस (उर्फ अजीब अक्षर) की व्याख्या करता है ।
मास्टरएक्सिलो

2

अगर मुझे सही ढंग से समझ में आया है कि आप एक टेक्स्ट फ़ाइल में एक टर्मिनल आउटपुट को बचाना चाहते हैं, है ना? लेकिन आप चाहते हैं कि इसे रंगों के साथ स्वरूपित किया जाए। अगर ऐसा है, तो यहाँ मेरे विचार हैं:

आउटपुट को स्वचालित रूप से हाइलाइट करना

जैसा कि आप शायद जानते हैं, यदि आप एक grep आउटपुट को टेक्स्ट फ़ाइल में कैप्चर करते हैं, तो ठीक है क्योंकि यह एक टेक्स्ट फाइल है जिसे फॉर्मेट नहीं किया जा सकता है। इसलिए, जहां तक ​​मैं जानता हूं, आप इसे आसान तरीके से नहीं कर सकते।

इसके बावजूद, एक साधारण वर्कअराउंड है, जिसमें आपके टेक्स्ट एडिटर को एहसास होता है कि किस तरह की फाइल खुल रही है। उदाहरण के लिए, मान लें कि आपके grep आउटपुट में कुछ bash घटक हैं, इसलिए bash हाइलाइट्स आपके लिए काम करता है (वैसे, ये अक्सर वे रंग होते हैं जिन्हें आप टर्मिनल में रंगीन आउटपुट में देखते हैं)। इसलिए ट्रिक उचित विस्तार के साथ फाइल में टेक्स्ट आउटपुट को सेव करना है। इसके बजाय कुछ करने की तरह:

ls | grep something > output

आप के लिए जा सकते हैं

ls | grep something > output.sh

जो gedit (या किसी भी सभ्य पाठ संपादक) को स्वचालित रूप से पहचान लेगा कि आप bash कोड के बारे में बात कर रहे हैं, और उसी के अनुसार इसे उजागर करेंगे। आपको आउटपुट को रंगीन करने की आवश्यकता नहीं है, प्रोग्राम आपके लिए यह करेगा यदि यह उस प्रकार के कोड को पहचानता है जो इसे खोल रहा है। यदि आप अन्य प्रकार के स्वरूपों के साथ काम कर रहे हैं, तो जो आप कर रहे हैं, उसके लिए बेहतर तरीके से समायोजन के लिए एक्सटेंशन को अनुकूलित करें (जैसे कि> output.xml,> output.html,> output.py ... आदि)। सौभाग्य! :)

आउटपुट फ़ाइल में कुछ शब्दों को हाइलाइट करना

इसलिए, अगर मुझे यह मिल गया है, तो आप उन शब्दों को उजागर करना चाहते हैं जिन्हें आपने खोजा था। फिर, कि एक सादे पाठ फ़ाइल में सिर्फ इसलिए नहीं किया जा सकता क्योंकि यह एक सादा पाठ है। हालाँकि आप इसमें बहुत ही आसान तरीके से कुछ प्रारूप जोड़ सकते हैं जैसे कि कुछ html कोडिंग का उपयोग करना। यह आपके आउटपुट को एक html कोड में बदल देगा, और जब आप इसे html (libreoffice लेखक, फ़ायरफ़ॉक्स, और 10000 वगैरह) की व्याख्या करने में सक्षम प्रोग्राम के साथ खोलेंगे तो आपको कुछ शब्द उच्चरित दिखेंगे।

ऐसा करने के लिए, मान लें कि यह आपका grep है, html को निर्यात किया गया है:

ls | grep keytext > output.html

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

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

और उल्लंघन, अब आपका keytext लाल रंग में हाइलाइटेड है।


1
अच्छा विचार !!, लेकिन मैं वाक्य रचना हाइलाइटिंग के लिए नहीं देख रहा हूँ। आप जानते हैं कि कैसे grep दूसरे रंग के साथ खोज कीवर्ड को रंग देता है, आमतौर पर लाल। मैं चाहता हूं कि आउटपुट फ़ाइल में कीवर्ड स्टैंडआउट रहे।
अल्माइटी कैमल

ठीक है, तो, आप रंग के साथ कुछ कर रहे हैं? HTML कोड की तरह? यदि आप इनपुट में रंग देखते हैं, तो इसे फॉर्मेट करना होगा और इसलिए इसे कहीं भी कोडित किया जाएगा, जैसे "फॉन्टोलर: रेड", राइट? यदि यह स्थिति है, तो आपको अपने grep में फ़ॉर्मेटिंग कोड को शामिल करना पड़ सकता है। :)
Rho

ठीक है, प्रश्न में संपादित के साथ मैं इसे प्राप्त करता हूं। :) आप किस आउटपुट एक्सटेंशन का उपयोग कर रहे हैं?
Rho

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