जवाबों:
यह सब इस बात पर निर्भर करता है कि आप किस झंडे को पास करते हैं।
सामान्य फ्लैगलेस ग्रीप (जो पासिंग-जी के समान है) "बेसिक रेगुलर एक्सप्रेशंस" का उपयोग करता है:
-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 के जितना संभव हो उतना करीब होने का प्रयास करता है लेकिन इसमें अभी भी कुछ खामियां हैं।
grep
एस (थोड़ा) अलग आरईएस (और झंडे, और ...) को
grep -P
, मुझे यकीन नहीं है कि अगर यह मदद करता है। Cygwins grep ऐसा ही करता है, afaik