पूरे कमांड आउटपुट को प्रदर्शित करते हुए कंसोल सर्च आउटपुट को हाइलाइट करें


19

जब मैं उदाहरण का उपयोग करता हूं तो मुझे cat file.txt | grep --color=tty "pattern"हाइलाइट किया गया पैटर्न मिलता है। जब मैं प्रत्येक हिट के आसपास कुछ अधिक संदर्भ चाहते हैं, ग्रेप है -A, -Bऔर -Cमानकों।

हालांकि, मैं पूरी फ़ाइल (या जो भी कमांड आउटपुट) प्रदर्शित करना चाहता हूं और एक निश्चित पैटर्न को उजागर करना चाहता हूं। क्या ऐसा हाइलाइट कमांड या टूल मौजूद है?


अब आप जो करना चाहते हैं, उससे अलग कैसे करना चाहते हैं?
बेंजामिन बैनियर

जवाबों:


22

वहाँ unix.stackexchange.com पर एक जवाब था कि यह साफ चाल थी:

grep -E --color 'pattern|$' file.txt

या

grep --color 'pattern\|$' file.txt

जो प्रत्येक पंक्ति पर आपके पैटर्न या अंत-पंक्ति से मेल खाता है। केवल पैटर्न पर प्रकाश डाला गया है।


+1 सरल, और आसानी से zgrep, bzgrep, आदि के लिए अनुकूल है!
स्टीफन लासिवस्की

क्या हर समय टाइप करने से बचने के लिए कोई उपाय है - रंग भरने के लिए? मुझे लगता है कि grep में रंग विकल्प एम्बेड करने के लिए इसका सुंदर मूल है, यह निश्चित रूप से नहीं कि हम हर बार रंग में स्पष्ट रूप से क्यों टाइप करते हैं। मैं स्क्रिप्ट बनाने की कोशिश की कहना है कि grepd फ़ाइलों में एक bash कह रही है grep - $ 1 $ 2 लेकिन यह काम नहीं करता है। कृपया इसे ठीक करने के लिए यहां कोई सुराग
सुर्जन कुमार गुल्ला

1
@lordlupine: GREP_OPTIONS='--color'अपने में जोड़ें ~/.bashrc(या शामिल करने के लिए सेटिंग संशोधित करें --color)। आपको एक नया टर्मिनल शुरू करना होगा या इसे लागू करने के लिए वर्तमान टर्मिनल में कमांड लाइन पर उस असाइनमेंट को निष्पादित करना होगा।
अगली सूचना तक रोक दिया गया।

9

मुझे ऐक पसंद है ।

ack --passthru somepattern filename

यह grep की तरह है, लेकिन बेहतर है। यह डिफ़ॉल्ट रूप से हाइलाइट करता है, और --passthruविकल्प के साथ यह केवल मिलान लाइनों के बजाय संपूर्ण फ़ाइल (या मानक इनपुट) दिखाता है।


1
यदि आप ack में पाइप आउटपुट की कोशिश कर रहे हैं, उदाहरण के लिए tail, तो आपको --filterविकल्प का भी उपयोग करने की आवश्यकता है। उदाहरण के लिए:tail -f myLogFile | ack --filter --passthru pattern
गौरैया

5

मैं भी less(या ऐसे) के उपयोग की सलाह देता हूं, लेकिन मैं आपको एक अधिक व्यावहारिक समाधान दिखाना चाहता हूं। एक बार जब आप इस फ़ंक्शन को परिभाषित कर लेते हैं:

फ़ंक्शन हाइलाइट ()
{
    sed "s / $ 1 /` tput smso` और `tput rmso` / g" "$ {2 -}"
}

आप इसे इस तरह से उपयोग कर सकते हैं:

command | highlight pattern
highlight pattern file.txt

नोट: इस संस्करण में केस संवेदी है कि बदलने के लिए सिर्फ संलग्न iबाद gमें sedअभिव्यक्ति।


1
मैं tputमानों को हार्डकोड करने के बजाय लागू करूंगा । इस तरह आप उपयोग करने से भी बच जाते हैं echo -e, जिसके अन्य प्रभाव हो सकते हैं।
इग्नासियो वाज़केज़-अब्राम्स

आप बिल्कुल सही हैं, मैंने इसे बिना किसी भाग्य के खोजा। धन्यवाद।
cYrus

इस संस्करण को कैप्चरिंग कोष्ठकों की आवश्यकता नहीं है और इसे prog | highlight "pattern"या तो चलाया जा सकता है या highlight "pattern" file:highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
आगे की सूचना तक रोका

मेरे sedकौशल मूल रूप से अस्तित्व में नहीं हैं। मुझे उस मामले को कैसे बदलना होगा ताकि पैटर्न केस संवेदनशील हो सके। वैसे भी, मैं उस एक को मेरे bash_functions में शामिल करूंगा। आपका बहुत बहुत धन्यवाद।
डेरामिक

@DerMike: अब यह संवेदनशील मामला है।
साइरस

3

पासिंग -Cके लिए grepपर्याप्त रूप से उच्च मूल्य के साथ ऐसा होगा।


मैं शपथ ले सकता था मुझे पिछली बार जब मैंने कोशिश की तो कुछ और मिला। (प्रत्येक संदर्भ को '-----' के बीच विभाजकों के साथ मिलाता है।) अब जब आपने मुझे बताया, तो यह ठीक चलता है :-) धन्यवाद।
डेरामिक

यदि पर्याप्त संदर्भ नहीं है तो यह प्रत्येक मैच को अलग कर देगा।
इग्नासियो वाज़क्वेज़-अब्राम्स

3

less हाइलाइटिंग पैटर्न है, इसलिए

less -p 'mypattern' file.txt

या

ridiculously | long | pipe | less

और फिर /एक पैटर्न की खोज करने के लिए कम में जिसे हाइलाइट किया जाएगा।

पक्षीय लेख:

आप अपने आदेश में सुधार कर सकते हैं, उदाहरण के लिए
सेट उपनाम alias grep="grep --color=tty"और इसे इस तरह उपयोग करें:

grep 'mypattern' file.txt;

1
आपको GREP_OPTIONS का उपयोग करने से बचना चाहिए, इसके बजाय उपनाम का उपयोग करें। देखें: Bugs.launchpad.net/ubuntu/+bug/67141
lesmana

सबसे नॉन नोकर। हटा दिया।
कैजुअल कोडर

GREP_OPTIONS का उपयोग कई प्रकार के grep(zgrep, bzgrep, bzfgrep, आदि) द्वारा किया जाता है , इसलिए, यदि आप चाहते हैं कि सभी प्रकार के grep लगातार व्यवहार करें, तो आपको grep के प्रत्येक रूप के लिए एक उपनाम सेट करना होगा। @ कैज़ुअल का नया उत्तर ऊपर किसी चीज़ के साथ नहीं होगा bzgrep pattern /var/log/messages.?.gz, जो कि एक उदाहरण है जहाँ रंग हाइलाइटिंग बहुत उपयोगी है।
स्टीफन लासिवस्की

1

एक अच्छा सुपरकैट टूल है, जो वास्तव में उस उद्देश्य को पूरा करता है। यह आपके कंसोल आउटपुट को रंगीन कर सकता है और आपके इनपुट से "हाइलाइटेड" html का उत्पादन कर सकता है।


धन्यवाद, यह आशाजनक लग रहा है। हालाँकि, मैं इसे फिलहाल काम नहीं करवा सकता।
डेरामाइक

1
इसकी कॉन्फिग फाइल्स ( /etc/supercatउबंटू में) पर एक नजर डालें , जो कलरिंग रूल्स सेट करती हैं, वे मूल रूप से कलर / रेग्जैक्स जोड़े (कुछ अतिरिक्त नियमों के साथ) हैं; मैन पेज भी छोटा और अच्छा है।
इवान तारासोव

मुझे vim.org/scripts/script.php?script_id=2676spcrc पर एक vim सिंटैक्स फ़ाइल मिली
DerMike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.