नहीं, sed regexes में गैर-लालची मिलान नहीं है।
आप की पहली आवृत्ति के लिए सभी पाठ मिलान कर सकते AC
"युक्त नहीं कुछ भी का उपयोग करके AC
के बाद" AC
जो पर्ल के रूप में एक ही है, .*?AC
। बात यह है कि, "कुछ भी शामिल नहीं है AC
" को एक नियमित अभिव्यक्ति के रूप में आसानी से व्यक्त नहीं किया जा सकता है: हमेशा एक नियमित अभिव्यक्ति होती है जो एक नियमित अभिव्यक्ति के निषेध को पहचानती है, लेकिन नकारात्मक regex तेजी से जटिल हो जाता है। और पोर्टेबल सेड में, यह बिल्कुल भी संभव नहीं है, क्योंकि नकारात्मक रेगेक्स को एक ऐसे विकल्प को समूहीकृत करने की आवश्यकता होती है, जो विस्तारित नियमित अभिव्यक्तियों (जैसे कि awk) में मौजूद हो, लेकिन पोर्टेबल बुनियादी नियमित अभिव्यक्तियों में नहीं। सीएनयू के कुछ संस्करण, जैसे कि GNU sed, में BRE के एक्सटेंशन होते हैं जो इसे सभी संभव नियमित अभिव्यक्तियों को व्यक्त करने में सक्षम बनाते हैं।
sed 's/AB\([^A]*\|A[^C]\)*A*AC/XXX/'
रेगेक्स को नकारने की कठिनाई के कारण, यह अच्छी तरह से सामान्य नहीं होता है। इसके बजाय आप क्या कर सकते हैं अस्थायी रूप से लाइन को बदलना है। कुछ sed कार्यान्वयन में, आप एक मार्कर के रूप में newlines का उपयोग कर सकते हैं, क्योंकि वे एक इनपुट लाइन में नहीं दिखाई दे सकते हैं (और यदि आपको कई मार्करों की आवश्यकता है, तो एक अलग चरित्र के बाद newline का उपयोग करें)।
sed -e 's/AC/\
&/g' -e 's/AB[^\
]*\nAC/XXX/' -e 's/\n//g'
हालाँकि, सावधान रहें कि बैकस्लैश-न्यूलाइन कुछ सेडान संस्करणों के साथ सेट कैरेक्टर में काम नहीं करता है। विशेष रूप से, यह GNU sed में काम नहीं करता है, जो कि गैर-एम्बेडेड लिनक्स पर sed कार्यान्वयन है; GNU sed में आप \n
इसके बजाय उपयोग कर सकते हैं :
sed -e 's/AC/\
&/g' -e 's/AB[^\n]*\nAC/XXX/' -e 's/\n//g'
इस विशिष्ट मामले में, पहली AC
को एक नई पंक्ति से बदलना पर्याप्त है । मैंने जो दृष्टिकोण ऊपर प्रस्तुत किया है वह अधिक सामान्य है।
Sed में एक अधिक शक्तिशाली दृष्टिकोण लाइन को होल्ड स्पेस में सहेजना है, लाइन के सभी "दिलचस्प" भाग को हटा दें, होल्ड स्पेस और पैटर्न स्पेस का आदान-प्रदान करें या पैटर्न स्पेस को होल्ड स्पेस में रखें और दोहराएं। हालांकि, यदि आप ऐसी चीजें करना शुरू करते हैं जो इस जटिल हैं, तो आपको वास्तव में जागरण पर स्विच करने के बारे में सोचना चाहिए। अवीक में गैर-लालची मिलान भी नहीं है, लेकिन आप एक स्ट्रिंग को विभाजित कर सकते हैं और भागों को चर में बचा सकते हैं।