Grep में किस नियमित अभिव्यक्ति मानक का उपयोग किया जाता है?


3

क्या grep POSIX + ASCII या कुछ और में मिश्रित नियमित अभिव्यक्ति मानक का उपयोग किया जाता है?

जवाबों:


5

यह सब इस बात पर निर्भर करता है कि आप किस झंडे को पास करते हैं।

सामान्य फ्लैगलेस ग्रीप (जो पासिंग-जी के समान है) "बेसिक रेगुलर एक्सप्रेशंस" का उपयोग करता है:

-G, --basic-regexp
    Interpret PATTERN as a basic regular expression (BRE, see 
    below).  This is the default.

यदि आप निर्दिष्ट करते हैं-तो यह "विस्तारित" नियमित अभिव्यक्ति का उपयोग करता है:

-E, --extended-regexp
    Interpret PATTERN as an extended regular expression (ERE, 
    see below).  (-E is specified by POSIX.)

और फिर आपके पास पर्ल नियमित अभिव्यक्ति (पीसीआरई) के लिए है:

-P, --perl-regexp
    Interpret PATTERN as a Perl regular expression.  This is highly 
    experimental and grep -P may warn  of  unimplemented features.

मूल बनाम विस्तारित नियमित अभिव्यक्तियाँ

बुनियादी नियमित अभिव्यक्तियों में मेटा-वर्ण; +, {,।, (और;) अपना विशेष अर्थ खो देते हैं; इसके बजाय बैकस्लेस्ड संस्करण \ ?, +, {, \ |, (, और) का उपयोग करें।

पारंपरिक egrep ने {meta-character का समर्थन नहीं किया, और कुछ egrep कार्यान्वयन {@ के बजाय समर्थन करते हैं, इसलिए पोर्टेबल स्क्रिप्ट को grep -E पैटर्न में {से बचना चाहिए और शाब्दिक {से मेल खाने के लिए [{] का उपयोग करना चाहिए।

GNU grep -E यह मानकर पारंपरिक उपयोग का समर्थन करने का प्रयास करता है कि {विशेष नहीं है यदि यह एक अमान्य अंतराल विनिर्देश की शुरुआत होगी। उदाहरण के लिए, कमांड grep -E '{1' नियमित अभिव्यक्ति में वाक्य रचना त्रुटि की रिपोर्ट करने के बजाय दो-वर्ण स्ट्रिंग {1 की खोज करता है। POSIX.2 इस व्यवहार को एक विस्तार के रूप में अनुमति देता है, लेकिन पोर्टेबल स्क्रिप्ट से बचना चाहिए।

इसलिए यद्यपि grep POSIX के जितना संभव हो उतना करीब होने का प्रयास करता है लेकिन इसमें अभी भी कुछ खामियां हैं।


हाँ, मैं राॅड करता हूं लेकिन यह नहीं कहता कि वास्तव में कौन से मानक का उपयोग किया जाता है, और यदि यह सामान का मिश्रण है, तो मिश्रित लेज़र का कोई संदर्भ नहीं है। इसलिए मूल रूप से हम जानते हैं कि यह कुछ के साथ काम करता है, लेकिन वास्तव में नहीं जानता। : डी
डेनिस एस।

@den: POSIX रेगुलर एक्सप्रेशन से वर्णन किया गया regex (7) , पर्ल के - perlre
ग्रैविटी

यह लिनक्स के बारे में है, लेकिन मिन-डब्लू ("grep: समर्थन के लिए -P विकल्प" इस -disable-perl-regexp बाइनरी में संकलित नहीं है) "-पी" विकल्प उपलब्ध नहीं है, कम से कम डिफ़ॉल्ट रूप से नहीं।
पीटर मोर्टेनसेन

विभिन्न grepएस (थोड़ा) अलग आरईएस (और झंडे, और ...) को
समझते हैं

@PeterMortensen, GnuWin32 समर्थन करता है grep -P, मुझे यकीन नहीं है कि अगर यह मदद करता है। Cygwins grep ऐसा ही करता है, afaik
सेबस्टियन गोडलेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.