grep: कोष्ठक के बीच कुछ भी मैच के लिए केवल regex


21

मैं केवल शब्द कोष्ठक के बीच कैसे मेल खाता हूं

इनपुट: this is (test.com)

इच्छा आउटपुट: test.com


1
क्या आप 'grep' regex को मैच के लिए देख रहे हैं, या, उदाहरण के लिए, अपना आउटपुट दिखाने के लिए एक 'sed' स्थानापन्न कमांड?
rickhg12hs

जवाबों:


28

यहां कुछ विकल्प दिए गए हैं, जिनमें से सभी वांछित आउटपुट प्रिंट करते हैं:

  1. ध्वज के grepसाथ प्रयोग -o(लाइन के केवल प्रिंट मिलान भाग) और पर्ल संगत नियमित अभिव्यक्ति ( -P) जो लुकरॉइड कर सकते हैं :

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    रेगेक्स को कुछ समझाने की आवश्यकता हो सकती है:

    • (?<=\(): यह एक सकारात्मक खोज है , सामान्य प्रारूप है (?<=foo)barऔर यह barसही पाए जाने के बाद के सभी मामलों से मेल खाएगा foo। इस मामले में, हम एक शुरुआती कोष्ठक की तलाश कर रहे हैं, इसलिए हम \(इसे बचने के लिए उपयोग करते हैं।

    • (?=\)): यह एक सकारात्मक रूप है और बस समापन कोष्ठक से मेल खाता है।

  2. इसका कारण यह है कि यह किसी भी लाइन के मिलान वाले हिस्से को प्रिंट -oकरने का grepकारण बनता है, इसलिए हम जो कुछ भी कोष्ठक में हैं उसे देखते हैं और फिर उन्हें हटा देते हैं sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. पर्ल के साथ पूरी बात पारस:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. पूरी चीज़ को साथ में रखें sed:

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

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