নিম্নলিখিত লিখিত সামগ্রীগুলির সাথে আমার একটি ফাইল রয়েছে:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
এবং আমাকে এমন একটি স্ক্রিপ্ট তৈরি করতে হবে যা প্রথম লাইনের "নাম" কে "কিছু", দ্বিতীয় লাইনের "পাসওয়ার্ড" এবং "তৃতীয় লাইনের" নামকে "কিছু" আলাদা করে তুলবে। আমি এই ফাইলটিতে ঘটে যাওয়া ক্রমের উপর নির্ভর করতে পারি না, তাই আমি কেবল "নাম" এর প্রথম উপস্থিতিটিকে "কিছু" দিয়ে এবং "নাম" এর দ্বিতীয় ঘটনাটি "কিছু" দিয়ে প্রতিস্থাপন করতে পারি না। আমি সঠিক জিনিসটি খুঁজে পেয়েছি এবং প্রতিস্থাপন করছি তা নিশ্চিত করার জন্য আমাকে আশেপাশের স্ট্রিংগুলির অনুসন্ধান করতে হবে।
এখন পর্যন্ত আমি প্রথম "নাম" উপস্থিতিটি সন্ধান এবং প্রতিস্থাপনের জন্য এই আদেশটি চেষ্টা করেছি:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
তবে এটি কাজ করছে না তাই আমি ভাবছি এর মধ্যে কয়েকটি চরিত্রের পালানোর দরকার হতে পারে ইত্যাদি etc.
আদর্শভাবে, আমি দুটি "ব্যবহারকারীর নাম" উপস্থিতিগুলির সাথে মেলে কেবলমাত্র "নাম" প্রতিস্থাপন করতে regex ব্যবহার করতে সক্ষম হতে চাই love এর মতো কিছু তবে সাথে sed
:
<username>.+?(name).+?</username>
এবং বন্ধনীর সামগ্রীগুলিকে "কিছু" দিয়ে প্রতিস্থাপন করুন।
এটা কি সম্ভব?