regex
  • sed
  • grep
  • wildcard
  • string-substitution
  • 2011-06-06 13 views 5 likes 
    5

    मैं वाइल्डकार्ड के आधार पर एक प्रतिस्थापन करना चाहता हूं। उदाहरण के लिए, केवल "कार्यकाल" को "स्वभाव" में बदलें, यदि "कार्यकाल" शब्द '=' चिह्न के बाद आता है। मूल रूप से एक regex कि इस =.*tenuresed वाइल्डकार्ड प्रतिस्थापन

    एसईडी आदेश मैं इसके लिए इतना है कि मेल खाएंगे है:

    sed 's/=.*tenure/=.*disposition/g' file.txt 
    

    हालांकि, अगर मैं एक फ़ाइल वाले को यह पारित:

    blah blah blah = change "tenure" to "disposition" 
    

    मैं

    blah blah blah =.*disposition" to "disposition" 
    

    के बजाय:

    blah blah blah = change "disposition" to "disposition" 
    

    मैं प्रतिस्थापन कैसे करूं कि रेगेक्स में वाइल्डकार्ड गंतव्य फ़ाइल का हिस्सा नहीं होगा?

    उत्तर

    6

    आप एक कैप्चरिंग समूह उपयोग करने के लिए पाठ प्रतीत होता है कि दोनों के बीच अपने बराबर चिह्न और "कार्यकाल" पर कब्जा करने की जरूरत है।

    तो

    sed 's/=\(.*\)tenure/=\1disposition/g' 
    

    नोट संदर्भ और समूह आप पर कब्जा कर लिया उपयोग करने के लिए \1 का उपयोग।

    तो

    echo 'blah blah blah = change "tenure" to "disposition"' | sed 's/=\(.*\)tenure/=\1disposition/g' 
    

    में हम

    blah blah blah = change "disposition" to "disposition". 
    

    देखें Regex grouping मिलता है।

    2
    sed 's/\(=.*\)tenure/\1disposition/g' file.txt 
    
    2

    आप उन्हें उत्पादन में जोड़ने के लिए = और tenure के बीच मिलान किया पात्रों को बचाने की जरूरत:

    sed 's/=(.*)tenure/=\1disposition/g' file.txt 
    

    इसके अलावा, आप sed को -i विकल्प जोड़ना चाहिए यदि आप फ़ाइल संपादित करना चाहते हैं इनस्थल (फ़ाइल में संशोधन करें)।

    2

    आपको sed में backreference का उपयोग करना होगा। इस तरह यह प्रयोग करें:

    sed 's/\(=.*\)tenure/\1disposition/g' 
    

     संबंधित मुद्दे

    • कोई संबंधित समस्या नहीं^_^