रेगुलर एक्सप्रेशन के साथ विशेष पात्रों का मिलान


10

कहो तो बहुत आसान है अगर मैं लो-केस लेटर्स और नंबर्स वाली कोई चीज़ ढूंढना चाहता हूं

Prod_text | grep -E '[0-9a-z]'

ब्रैकेट, पात्रों के एक सेट से मेल खाने के लिए उपयोगी हैं, लेकिन उन लोगों के बारे में क्या है जो कुछ विशेष हैं?
यदि मैं कोष्ठक का उपयोग करना चाहता हूं, तो किसी भी वर्ण से मेल खाता है, लेकिन इनमें से एक: एक समापन ब्रैकेट ], एक डैश (या हाइफ़न) "-", दोनों स्लैश /और \, एक कैरेट ^, एक कोलन :
क्या यह ऐसा लगेगा (मुझे पता है कि यह काम नहीं करता है)?

[^] - / \ ^:]

जवाबों:


11

ब्रैकेट अभिव्यक्ति में शाब्दिक ]और शाब्दिक मिलान करने के लिए आपको उन्हें इस तरह उपयोग करना होगा:-

[^]/\^:-]

या, और भी बेहतर, क्योंकि कुछ उपकरणों के पीछे भागने की आवश्यकता होती है :

[^]/\\^:-]

यह है कि
सही वर्ग कोष्ठक ( ']') (, यदि कोई एक प्रारंभिक के बाद '^') ने अपने विशेष अर्थ खो देते हैं और एक ब्रैकेट अभिव्यक्ति में ही प्रतिनिधित्व करता है, तो यह सूची में पहले होता जाएगा
और
हाइफ़न-माइनस चरित्र करेगा यदि यह पहले (प्रारंभिक it ^ ’के बाद, यदि कोई है) या सूची में अंतिम होने पर स्वयं के रूप में व्यवहार किया जाता है
इसलिए
यदि कोई ब्रैकेट अभिव्यक्ति दोनों '-' और ']' को निर्दिष्ट करता है, तो '] को पहले (बाद में) रखा जाएगा '^', यदि कोई हो) और '-' कोष्ठक अभिव्यक्ति के भीतर है।
ब्रैकेट एक्सप्रेशन के नियम ERE और BRE के लिए समान हैं ।


2
मैं बैकस्लैश को सुरक्षित पक्ष पर दोहराता हूं। यह कई awkकार्यान्वयन और perlउदाहरण के लिए आवश्यक है ।
स्टीफन चेज़लस

"केयरट से क्लोजिंग ब्रैकेट" के बारे में क्या? जैसे [^-]](यह फेल होता है)?
23

2
@ आईबग - यकीन है कि यह विफल हो जाता है क्योंकि सही ब्रैकेट पहले होना चाहिए यदि आप इसे शाब्दिक रूप से मेल खाना चाहते हैं। मैं नहीं कर रहा हूँ यकीन है कि मुझे लगता है कि "सीमा" के बात समझ है कि आप के रूप में उल्लेख ^के बाद किया जाता है ]तो [^-]]भी दोनों अगर काम नहीं होता ^और ]सचमुच (बस की तरह व्यवहार कर रहे थे [b-a])। वैसे भी, यदि आप उदाहरण के ;लिए कोष्ठक को बंद करना चाहते हैं, तो आप पहले सीमा तक का उपयोग कर सकते हैं ](जो कि बैकस्लैश है) और ]ब्रैकेट अभिव्यक्ति में पहले चार के रूप में शामिल करें, जैसे कि [];-\\]
don_crissti

@don_crissti के बारे में क्या [[.^.]-[.-.]]? मुझे लग रहा है कि यह काम करेगा। मान लेते हैं कि ASCII का कोड ^पहले है -
13

मेरे प्रश्न के लिए एक आलसी समाधान मिला। बस पात्रों को [^[.].][.-.]/\^:]
संप्रेषित

7

अजीब तरह से शायद, आपको विशिष्ट स्थानों में कुछ पात्रों की आवश्यकता है। आपके पास ]एक सेट में पहला चरित्र -होना चाहिए , और एक सेट में अंतिम चरित्र होना चाहिए।

यहाँ एक आरई है जो आपकी आवश्यकताओं को पूरा करता है [^]\^/-]:

echo 'Hello[world]-[sun] ^^ 4/5 or 3\4' | grep -Eo '[^]\^/-]' | xargs
H e l l o [ w o r l d [ s u n 4 5 o r 3 4

1
यह वास्तव में अजीब नहीं है, अस्पष्टता से बचने के लिए बस आवश्यक है
केविन

1
दूसरा [चरित्र वहाँ नहीं है; ओपी इसे बाहर नहीं करना चाहता है।
स्कॉट

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