grep(1)
डिफ़ॉल्ट रूप से POSIX Basic Regular Expressions का उपयोग करता था, और POSIX Extended Regular Expressions जब -E
विकल्प के साथ उपयोग किया जाता है।
POSIX Regular Expressions में गैर-विशेष पात्रों ने बचने के दौरान व्यवहार को अपरिभाषित किया है, पूर्व। \s
, और गैर लालची मिलान के लिए कोई वाक्यविन्यास नहीं है, पूर्व। +?
। इसके अलावा, बीआरई में, +
और |
ऑपरेटर उपलब्ध नहीं हैं, और समूहकरण करने के लिए ब्रांड्स को बचाना होगा।
POSIX character classes[[:space:]]
और [[:alnum:]_]
\s
और \w
क्रमशः के लिए एक पोर्टेबल विकल्प हैं।
पुनरावृत्ति से अगले मिलान करने वाले चरित्र को छोड़कर गैर-लालची मिलान, पूर्व का अनुकरण करने के लिए उपयोग किया जा सकता है। [^*]+?\w*:
बराबर से [^*[:alnum:]_:]+[[:alnum:]_]*:
है।
grep -e '^[[:space:]]*\*[[:space:]]\{1,\}\[ \][^*[:alnum:]_+]\{1,\}[[:alnum:]_]*:[^*]\{1,\}[[:digit:]]$' \
-e '[^*]\{1,\}\.com\.au$' file1
या एक ERE:
grep -E '^[[:space:]]*\*[[:space:]]*\[ \][^*[:alnum:]_:]+[[:alnum:]_]*:[^*]+[[:digit:]]$|[^*]+\.com\.au$' \
file1
ध्यान दें कि grep(1)
की जीएनयू कार्यान्वयन दोनों लघु चरित्र वर्गों (\s
और \w
के लिए अनुमति देता
दिया नियमित अभिव्यक्ति कई बीआरईएस के रूप में प्रतिनिधित्व किया जा सकता है) और गैर-लालची पुनरावृत्ति (+?
), गैर-पोर्टेबल एक्सटेंशन के रूप में।
यह अच्छा है लेकिन मैं एक multiline खोज कैसे करूँ? मानते हुए grep लाइन द्वारा लाइन काम करता है .. मुझे एक बहु लाइन खोज चाहिए .. तो क्या कोई समाधान है? –
@ किरण वेमुरी यह एक अलग सवाल है जिसे आपने यहां देखा था। उस विषय को [इस SO सवाल] द्वारा कवर किया गया है (http: // stackoverflow।कॉम/प्रश्न/152708/कैसे-एक-मल्टीलाइन-पैटर्न-इन-ए-फाइल-उपयोग-pcregrep) –
डिफ़ॉल्ट रूप से, egrep को समझ में नहीं आता है या \ w या तो। हालांकि, यदि पीसीआरई संकलित किया गया है तो आप --perl-regexp ध्वज का उपयोग कर सकते हैं। –