मैं केवल शब्द कोष्ठक के बीच कैसे मेल खाता हूं
इनपुट:
this is (test.com)
इच्छा आउटपुट:
test.com
मैं केवल शब्द कोष्ठक के बीच कैसे मेल खाता हूं
इनपुट:
this is (test.com)
इच्छा आउटपुट:
test.com
जवाबों:
यहां कुछ विकल्प दिए गए हैं, जिनमें से सभी वांछित आउटपुट प्रिंट करते हैं:
ध्वज के grepसाथ प्रयोग -o(लाइन के केवल प्रिंट मिलान भाग) और पर्ल संगत नियमित अभिव्यक्ति ( -P) जो लुकरॉइड कर सकते हैं :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
रेगेक्स को कुछ समझाने की आवश्यकता हो सकती है:
(?<=\(): यह एक सकारात्मक खोज है , सामान्य प्रारूप है (?<=foo)barऔर यह barसही पाए जाने के बाद के सभी मामलों से मेल खाएगा foo। इस मामले में, हम एक शुरुआती कोष्ठक की तलाश कर रहे हैं, इसलिए हम \(इसे बचने के लिए उपयोग करते हैं।
(?=\)): यह एक सकारात्मक रूप है और बस समापन कोष्ठक से मेल खाता है।
इसका कारण यह है कि यह किसी भी लाइन के मिलान वाले हिस्से को प्रिंट -oकरने का grepकारण बनता है, इसलिए हम जो कुछ भी कोष्ठक में हैं उसे देखते हैं और फिर उन्हें हटा देते हैं sed:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
पर्ल के साथ पूरी बात पारस:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
पूरी चीज़ को साथ में रखें sed:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
एक दृष्टिकोण का उपयोग करने के होगा PCRE - पर्ल कम्पैटिबल रेग्युलर एक्सप्रेशंस के साथ grep:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com