इसके विभिन्न उपकरण और संस्करण नियमित अभिव्यक्ति के विभिन्न रूपों का समर्थन करते हैं। प्रत्येक का प्रलेखन आपको बताएगा कि वे क्या समर्थन करते हैं।
मानक मौजूद हैं ताकि सभी सुविधाओं के एक न्यूनतम सेट पर भरोसा कर सकें जो सभी अनुरूप अनुप्रयोगों में उपलब्ध हैं।
उदाहरण के लिए, के सभी आधुनिक कार्यान्वयन sedऔर grepके रूप में POSIX द्वारा निर्दिष्ट (कम से कम एक संस्करण या मानक के अन्य, लेकिन यह मानक पिछले कुछ दशकों में इस संबंध में एक बहुत विकसित नहीं किया गया है) बुनियादी नियमित अभिव्यक्ति लागू।
POSIX BRE और ERE में, आपके पास [:alnum:]वर्ण वर्ग है। यह आपके लोकेल में अक्षरों और अंकों से मेल खाता है (ध्यान दें कि अक्सर इसमें बहुत अधिक शामिल होता है a-zA-Z0-9जब तक कि लोकेल सी नहीं हो)।
इसलिए:
grep -x '[[:alnum:]_]\{1,\}'
एक या अधिक अलंकरण या _ से मेल खाता है।
[\w]POSIX द्वारा बैकस्लैश या मैच के लिए आवश्यक है w। तो तुम एक नहीं मिलेगा grepया sedकार्यान्वयन जहां कि उपलब्ध है (जब तक के माध्यम से गैर मानक विकल्प)।
\wअकेले के लिए व्यवहार POSIX द्वारा निर्दिष्ट नहीं है, इसलिए कार्यान्वयन को वे जो चाहते हैं करने की अनुमति है। जीएनयू grepने कहा कि बहुत पहले।
GNU grepमें अपना स्वयं का regexp इंजन होता था, लेकिन अब यह GNU libc का उपयोग करता है (हालाँकि यह अपनी प्रति एम्बेड करता है)।
यह आपके लोकेल में अलनम्स और अंडरस्कोर का मिलान करने के लिए है। हालाँकि, वर्तमान में यह एक बग है कि यह केवल एकल-बाइट वर्णों से मेल खाता है (उदाहरण के लिए, UTF-8 लोकेल में नहीं, भले ही यह स्पष्ट रूप से एक अक्षर है और भले ही यह उन सभी स्थानों में मेल खाता हो, जहां é एक है चरित्र)।
\wPerl regexp और PCRE में एक regexp ऑपरेटर भी है । PCRE / perl POSIX नियमित अभिव्यक्ति नहीं हैं, वे पूरी तरह से एक और चीज हैं।
अब, जिस तरह से जीएनयू grep -Pपीसीआरई का उपयोग करता है, यह बिना किसी मुद्दे के समान है -P। इसका उपयोग करके यद्यपि वहाँ काम किया जा सकता है (*UCP)(हालाँकि गैर-UTF8 स्थानों में इसके दुष्प्रभाव भी हैं)।
GNU sedअपने स्वयं के regexps के लिए GNU libc के रेगेक्स का भी उपयोग करता है। यह इसे इस तरह से उपयोग करता है, हालांकि इसमें GNU के समान बग नहीं है grep।
GNU sedPCREs का समर्थन नहीं करता है। कोड में कुछ साक्ष्य हैं जिन्हें पहले प्रयास किया गया है, लेकिन यह अब एजेंडा में नहीं है।
यदि आप पर्ल के नियमित भाव चाहते हैं, तो बस उपयोग करें perl।
अन्यथा, मैं कहूंगा कि आपके sed/ के विशेष कार्यान्वयन के फर्जी गैर-मानक विशेषता पर भरोसा करने के बजाय grepमानक और उपयोग के साथ रहना बेहतर होगा [_[:alnum:]]।
[_[:alnum:]]एक अच्छा समाधान है जो मुझे इसे[\w/]([_[:alnum:]/]उस स्थिति में) की तरह विस्तारित करने की अनुमति देता है ।