मैं केवल शब्द कोष्ठक के बीच कैसे मेल खाता हूं
इनपुट:
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