क्या sed या perl में विम के zs के बराबर है?


11

विम में हम \zsपरमाणु का उपयोग यह कहने के लिए कर सकते हैं कि "वास्तव में यहाँ मैच शुरू करें":

:%s/funnyword\zs.*$/otherword/

वहाँ sed या यहाँ तक कि पर्ल के लिए एक बराबर है?

जवाबों:


15

पर्ल (और पीसीआरई) में यह एक शून्य-चौड़ाई लुकअप के साथ प्राप्त करने योग्य है :

(?<=funnyword).*$

जो "अजीब" से मेल खाता है, लेकिन मैच के हिस्से के रूप में इसका उपभोग नहीं करता है। ये केवल लुकबाइंड में निश्चित लंबाई वाले टेक्स्ट के साथ काम करते हैं। यह (?<!...)निर्दिष्ट करने के लिए कि कुछ पाठ नहीं है, आप नकारात्मक रूप-रेखाओं ( ) का उपयोग कर सकते हैं ।

पर्ल के किसी भी हालिया संस्करण में, \Kलगभग एक सटीक विकल्प के\zs रूप में आप इसका उपयोग कर रहे हैं:

funnyword\K.*$

\Kअब तक मिलान की गई हर चीज को अलग करता है, लेकिन बाद में उस बिंदु से मिलान जारी रखता है। इससे पहले के भाग \Kको निश्चित-लंबाई नहीं होना चाहिए। यह अभी पीसीआरई में भी है , लेकिन मुझे यकीन नहीं है कि यह किस संस्करण में आया है।

\zeका उपयोग कर के बजाय शून्य-चौड़ाई लुकहैड के साथ प्राप्त किया जा सकता है (?=...)। उस पैटर्न को निश्चित-लंबाई की आवश्यकता नहीं है।


क्योंकि sed POSIX BRE का उपयोग करता है , इसलिए कोई लुक-अप नहीं है । इस मामले में, हालांकि, आप एक साधारण कैप्चरिंग समूह का उपयोग करके इसे आसानी से अनुकरण कर सकते हैं:

sed -e 's/\(funnyword\).*$/\1otherword/'

आप सकारात्मक लुकहेड के लिए भी ऐसा ही कर सकते हैं। यदि आपको वास्तव में अधिक जटिल आवश्यकता है, तो आपको पर्ल या किसी अन्य दृष्टिकोण को देखना पड़ सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.