ग्रीप शब्द सीमा


22

GNU प्रलेखन के अनुसार:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.

मेरा / etc / fstab इस तरह दिखता है:

/dev/sdb1       /media/fresh      ext2   defaults     0 0

मैं चाहता हूं कि grep / मीडिया / ताज़ा के अस्तित्व के लिए TRUE / FALSE लौटाए। मैं का उपयोग करने की कोशिश की \<और \>लेकिन यह काम नहीं किया। क्यूं कर?

egrep '\</media/fresh\>' /etc/fstab

युक्ति:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab

लेकिन यह बदसूरत लग रहा है।

मेरा जीआरपी 2.5.1 है


जवाबों:


27

\<और \>किसी शब्द के आरंभ और अंत में खाली स्ट्रिंग का मिलान करें और केवल शब्द घटक वर्ण हैं:

[[:alnum:]_]

से man grep:

Word-constituent characters are letters, digits, and the underscore.

तो, आपका रेगेक्स विफल हो रहा है क्योंकि /एक मान्य शब्द घटक चरित्र नहीं है।

इसके बजाय आपके आस-पास रिक्त स्थान होने के कारण, आप किसी शब्द से मेल खाने के -wविकल्प का उपयोग कर सकते हैं grep:

grep -wo '/media/fresh' /etc/fstab

उदाहरण:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh

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

@FelipeAlvarez मेरे संपादन की जाँच करें ..
heemayl

1

यह समस्या \<(और भी \b) न केवल /, बल्कि सभी गैर-शब्द पात्रों पर भी लागू होती है । (यानी पात्रों अन्य की तुलना में [[:alnum:]]और _।)

समस्या यह है कि रेगेक्स इंजन हमेशा एक गैर-शब्द चरित्र को बायपास करेगा जैसे /कि अगले एंकर की खोज करते समय \<। इसीलिए आपको नॉन-वर्ड कैरेक्टर्स को /सही के बाद नहीं लगाना चाहिए \<। यदि आप करते हैं, तो निर्माण से, कुछ भी मेल नहीं खाएगा।

-wGrep के विकल्प का विकल्प कुछ इस तरह होगा:

egrep "(^|\W)/media/fresh($|\W)"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.