मेरे पास निम्नलिखित सामग्री के साथ एक फाइल है:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
और मुझे एक स्क्रिप्ट बनाने की ज़रूरत है जो पहली पंक्ति में "नाम" को "कुछ" में बदल देती है, दूसरी पंक्ति में "पासवर्ड" को "कुछ", और तीसरी पंक्ति में "नाम" को "कुछ" के लिए। मैं फ़ाइल में होने वाली इन घटनाओं के आदेश पर भरोसा नहीं कर सकता, इसलिए मैं बस "नाम" की पहली घटना को "कुछ" और "नाम" की दूसरी घटना को "कुछ-कुछ" के साथ बदल नहीं सकता। मुझे वास्तव में यह सुनिश्चित करने के लिए आस-पास के तारों की खोज करने की आवश्यकता है कि मैं सही चीज़ ढूंढ रहा हूं और प्रतिस्थापित कर रहा हूं।
अब तक मैंने इस कमांड को पहली "नाम" घटना को खोजने और बदलने की कोशिश की है:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
हालाँकि यह काम नहीं कर रहा है इसलिए मैं सोच रहा हूँ कि इनमें से कुछ पात्रों को भागने की ज़रूरत हो सकती है, आदि।
आदर्श रूप से, मैं दो "उपयोगकर्ता नाम" घटित होने और केवल "नाम" को बदलने के लिए रेगेक्स का उपयोग करने में सक्षम होना चाहूंगा। कुछ इस तरह से लेकिन साथ sed
:
<username>.+?(name).+?</username>
और "कुछ" के साथ कोष्ठक में सामग्री को बदलें।
क्या यह संभव है?