अगर मैं इस कोड को bash में चलाता हूं:
echo dog dog dos | sed -r 's:dog:log:'
यह आउटपुट देता है:
log dog dos
मैं इसे कुत्ते की सभी घटनाओं को कैसे बदल सकता हूं?
अगर मैं इस कोड को bash में चलाता हूं:
echo dog dog dos | sed -r 's:dog:log:'
यह आउटपुट देता है:
log dog dos
मैं इसे कुत्ते की सभी घटनाओं को कैसे बदल सकता हूं?
जवाबों:
आपको g
संशोधक जोड़ना चाहिए, ताकि पैटर्न बफर की सामग्री का वैश्विक प्रतिस्थापन हो सके:
echo dog dog dos | sed -e 's:dog:log:g'
Sed पर एक शानदार प्रलेखन के लिए, http://www.grymoire.com/Unix/Sed.html देखें । इस वैश्विक ध्वज को यहां समझाया गया है: http://www.grymoire.com/Unix/Sed.html#uh-6
के लिए आधिकारिक प्रलेखन http://www.gnu.org/software/sed/manual/GNU sed
पर उपलब्ध है
sed -E 's,foo,bar,g'
वैश्विक चीज़ नहीं है। यदि आप इसे बदलने के लिए sed -E -e 's,foo,bar,g'
यह काम करता है।
आपको अंत में रखना g
होगा, यह "वैश्विक" के लिए खड़ा है:
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
, -r
विकल्प का अर्थ है "विस्तारित नियमित अभिव्यक्ति का उपयोग करें"। तो दी गई कमांड ठीक काम करती है, हालांकि इसे काम करने के लिए विस्तारित नियमित अभिव्यक्तियों की सुविधाओं की आवश्यकता नहीं है।
g
वैश्विक प्रतिस्थापन के लिए ध्वज की आवश्यकता है , आपको-r
यहां विकल्प की आवश्यकता नहीं है ।