आदेश है कि पाठ में regex पर प्रकाश डाला गया?


14

क्या कोई आदेश है जो पाठ में एक निश्चित अभिव्यक्ति को उजागर करता है?

मैं 'सर्च' फंक्शन की तरह कुछ कम में देख रहा हूं, लेकिन lessदर्शक के बजाय स्टडआउट पर सामान्य टेक्स्ट आउटपुट के साथ ।

उदाहरण:

$ cat test.txt | highlight "an"

के लिए संभावनाएँ एक Afgh से अर्दली नाटो वापसी एक IST एक के राष्ट्रपति हामिद करजई के रूप में सामना करना पड़ा दो झटके dem एक संयुक्त राज्य अमेरिका सैनिकों पर डेड सीमा एक घ तालिब एक रुका शांति वार्ता।

यह निर्दिष्ट नियमित अभिव्यक्ति को उजागर करने के लिए रंग या किसी अन्य साधन का उपयोग कर सकता है।



@ गिल्स, कुछ हद तक, लेकिन उस सवाल की कहीं अधिक जटिल आवश्यकताएं थीं।
cjm

जवाबों:


17

निश्चित नहीं है कि यह एक विशेषता या सिर्फ कुछ छिपे हुए साइड इफेक्ट के कारण है, लेकिन यह GNU grep2.11 में काम करता है।

grep --color 'an\|' test.txt

10
यह ऐसा है जैसे आप कर रहे हैं grep 'an' OR ''''सफलतापूर्वक इनपुट में हर स्थान पर कुछ भी नहीं मेल खाता है। केवल anप्रकाश डाला गया है, क्योंकि आप कुछ भी नहीं उजागर कर सकते हैं। :-)
मिकेल

प्रतिभाशाली। यह मेरे लिए काम नहीं करता था, लेकिन grep --color -e 'an' -e ' '(एक स्थान के लिए मिलान, जिसे रंगीन नहीं किया जा सकता था)। पाइपिंग की तुलना में बेहतर तरीका है sed -e ''/an/s//$(printf "\033[33;1m&\033[0m")/'', लेकिन शायद बाद वाला अधिक प्रदर्शनशील है। एक और खोज शब्द के लिए 'ए' बदलें। ;)
सूज

वाह! मैंने इसका उपयोग उस आदेश को संशोधित करने के लिए किया था जिसका उपयोग मैं सभी bashrcउपनामों को सूचीबद्ध करने के लिए करता था , और अब मेरे सभी उपनामों को लाल रंग में हाइलाइट किया गया है। उत्तम! alias aliases="clear;cat ~/.bashrc|grep --color \"alias\""
नव

9

ack के पास एक --passthruविकल्प है जो ऐसा करेगा:

ack --passthru an test.txt
some_command | ack --passthru an -

2
(+1) btw: उबंटू रेपो में, पैकेज (और निष्पादन योग्य) कहा जाता है ack-grep... (नाम ackएक कांजी कोड कनवर्टर पर लागू होता है)
पीटर।

2

आप मेरी इस पटकथा को आजमा सकते हैं। यह आपको एक फ़ाइल निर्दिष्ट करने देगा या यह मानक इनपुट लेता है। आप जिस पाठ को हाइलाइट करना चाहते हैं, उसके लिए आप पायथन नियमित अभिव्यक्ति को परिभाषित कर सकते हैं। नीयन हरे पर हाइलाइट किए गए टेक्स्ट डिफॉल्ट (हे मैं एक काली पृष्ठभूमि का उपयोग करता हूं!) लेकिन आप एएनएसआई रंग कोड को बदल सकते हैं ।

#!/usr/bin/env python

import sys
import re

def highlight_text(text,pat):
    def replacement_funk(matchobj):  return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
    return re.sub(pat,replacement_funk,text)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        input = sys.stdin
        pat = sys.argv[1]
    elif len(sys.argv) == 3:
        input = open(sys.argv[2])
        pat = sys.argv[1]
    else:
        sys.stderr.write("colorme pattern [inputfile]")
    text = input.read()
    print highlight_text(text,pat)

यहाँ एक उदाहरण है।

blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an

के लिए संभावनाएँ एक Afgh से अर्दली नाटो वापसी एक IST एक के राष्ट्रपति हामिद करजई के रूप में सामना करना पड़ा दो झटके dem एक संयुक्त राज्य अमेरिका सैनिकों पर डेड सीमा एक घ तालिब एक रुका शांति वार्ता।

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

अफगानिस्तान से नाटो की वापसी की एक क्रमिक संभावनाओं के कारण दो झटके लगे क्योंकि राष्ट्रपति हामिद करजई ने संयुक्त राज्य के सैनिकों पर सीमा की मांग की और तालिबान ने शांति वार्ता को रोक दिया।


स्टैकएक्सचेंज बोल्ड मार्कअप फंकी लगता है और यही कारण है कि आउटपुट में अतिरिक्त सितारे हैं। मुझे पता नहीं।
फथिंकर

<b>यदि आपको किसी शब्द का भाग प्रस्तुत करने की आवश्यकता हो तो उपयोग करें ।
cjm

0

$cat test.txt | grep --colour=auto -C 100000 an

"रंग" भी काम करता है। आप हमेशा विकल्प का उपयोग करने के लिए एक उपनाम को परिभाषित कर सकते हैं:

alias grep='grep --colour=auto -C 100000'

उपरोक्त को /etc/profile.d/ में कहीं या अपने .bashrc या जो भी रखें।


1
यह केवल मिलान लाइनों को प्रिंट करता है। फ्रैंक पूरे पाठ को चाहता है, सिर्फ मैचों के साथ हाइलाइट किया गया।
cjm

ऊपर -C जोड़ा गया - यह काम करता है लेकिन थोड़ा गड़बड़ है!
गेरेड्सज

3
यह काम करता है लेकिन आपको एक उपनाम नहीं बनाना चाहिए जिसे grep कहा जाता है। -C 1000000तुम्हारे साथ फिर से कभी नहीं मिल पाएगा। बस alias highlight='grep --colour=auto -C 1000000'. The cat in the first example is also not necessary: grep --colour = auto -C 100000 file` करें।
मत्ती

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