शायद सहज और नहीं के रूप में यकीनन सब नरक के रूप में लेकिन पूर्णता की भावना में अस्पष्ट, जब तक हम मार के लिए प्रतीक्षा कैप्चर में आने के लिए की जगह है, तो निम्न वर्तमान में संभव है।
#!/bin/bash
name='joshua'
[[ $name =~ ([ao].*)([oa]) ]] && \
echo ${name/$BASH_REMATCH/X${BASH_REMATCH[1]}X${BASH_REMATCH[2]}}
उस उदाहरण में हम जानते हैं कि हम क्या खोज रहे हैं। मैच के समीप सभी या वैश्विक रेगेक्स समकक्ष निम्नलिखित उदाहरण लालसा मैच के बिना संग्रह की आखिरी घटना के लिए लालची मैच करेंगे और जब तक कोई भी नहीं रहेगा तब तक पीछे की ओर बढ़ेगा।
#/bin/bash
name='joshua'
while [[ $name =~ .*[^X]([oa]) ]]; do
name=${name/$BASH_REMATCH/${BASH_REMATCH:0:-1}X${BASH_REMATCH[1]}}
done
echo $name
उदाहरण जो मान लिया गया है के लिए एक ही ओ और एक वर्ण है जो एक एक्स पहले से जुड़ा हुआ नहीं है के बारे में परवाह अभिव्यक्ति /(?<!X)([oa])/X\1/
पीछे देखो के लिए इसी तरह काम करेंगे कि। दोनों उदाहरण
jXoshuXa
एन ज्वॉय के लिए
उत्पादन!
स्रोत
2014-03-07 22:07:54
मुझे '$ {foo/bar/baz}' वाक्यविन्यास का उपयोग कर रेगेक्स प्रतिस्थापन करने में सक्षम होने के बारे में बैश (4.1.5) के मेरे संस्करण में कुछ भी दिखाई नहीं देता है। क्या आपके पास कोई संदर्भ नहीं है कि आपको ऐसा क्यों लगता है कि आपको ऐसा करने में सक्षम होना चाहिए? –
मुझे यकीन नहीं है कि मैं इसे कहां ठोकर खा रहा हूं लेकिन यह काम करता है। ऊपर दिए गए मेरे उदाहरण का उपयोग करके आप देख सकते हैं कि यह 'ओ' और' ए' को 'एक्स' के साथ बदल रहा है। बहुत चालाक – joshuapoehls
http://tldp.org/LDP/abs/html/parameter-substitution.html देखें, इसका विवरण पृष्ठ के नीचे के लगभग 3/4 है। –