সেড (SED) দিয়ে স্ট্রিং প্রসেস করা

command-lineprocessorsedsellstring

ইউনিক্স মেশিনে কাজ করতে গেলে মাঝে মাঝেই বিভিন্ন কমান্ড দিতে হয় তারপর সেখান থেকে স্ট্রিং কপি করে অন্য কোথাও পেস্ট করতে হয়। এই সব ঝামেলা কে একটা স্ক্রিপ্ট আকারে লিখতে চাইলে স্ট্রিং প্রসেস খুব জরুরি। সেড (SED) এর পুরা নাম হলো স্ট্রিম এডিটর। এর কাজ হচ্ছে ফাইলের টেক্সট, স্ট্রিং ইত্যাদি প্রসেস করা। আমি ফাইলের কন্টেন্ট পরিবর্তন করার জন্য সেড ব্যবহার করি।


সেড এর বেসিক কমান্ড

sed <option> <script> <input-files>



উদাহরণ ১

রকিব নুসরাত কে ভালোবেসে একটা চিঠি দিয়েছিল।

প্রিয় নুসরাত,
আমি সেড নিয়ে কাজ করতেছি, কিন্তু নিজে সেড থাকি না। নুসরাত নাম খুব সুন্দর। আমি নুসরাত এর সাথে সুখ দুঃখ ভাগ করে নিতে চাই। নুসরাত কি বলে জানতে চাই?        

ফাইল: nusrat.txt


নুসরাত ভালোবাসা প্রত্যাখ্যান করেছে। এখন সে ফারিয়াকে একই চিঠি দিবে কিন্তু আগের চিঠির যে সব জায়গায় নুসরাত আছে তা পরিবর্তন করে ফারিয়া লিখে দিবে। যেহেতু নুসরাত সাড়া দেয় নাই, তাই নিচের কমান্ড দিয়ে দিল। এখানে s হলো সাবস্টিটিউট এবং /g হলো গ্লোবাল। তাই সব নুসরাত, ফারিয়া দ্বারা পরিবর্তন হয়ে যাবে

sed 's/নুসরাত/ফারিয়া/g' nustar.txt > faria.txt


এখন faria.txt নামের একটা ফাইল তৈরী হবে।

প্রিয় ফারিয়া,
আমি সেড নিয়ে কাজ করতেছি, কিন্তু নিজে সেড থাকি না। ফারিয়া নাম খুব সুন্দর। আমি ফারিয়া এর সাথে সুখ দুঃখ ভাগ করে নিতে চাই। ফারিয়া কি বলে জানতে চাই?

ফাইল: faria.txt



উদাহরণ ২

মিঃ রকিব ফারিয়ার কাছেও পাত্তা পেল না। তানিয়া নামের আরেক মেয়ে আছে, তার কাছে একই রকম চিঠি দিবে। সমস্যা হচ্ছে সবার নামে নতুন ফাইল তৈরী হয়ে যাচ্ছে। এগুলা কেউ দেখে ফেললে ঝামেলা। যেহেতু কেউ পাত্তা দিচ্ছে না, তাই কত জনকে দেয়া লাগে কে জানে, তা সে চাচ্ছে love-letter.txt নামের একটাই ফাইল থাকবে। রিজেক্ট হলে শুধু নাম চেঞ্জ করে নতুন কাউকে দিবে। কত জন আর রিজেক্ট করবে? কেউ না কেউ সাড়া দিবেই দিবে। তাই না? faria.txt কে love-letter.txt তে রিনেম করে ফেলেছে। এখন -i ফ্ল্যাগ ব্যবহার করে কমান্ড দিবে। -i ফ্ল্যাগ কোন কিছু প্রিন্ট করে না কিন্তু তলে তলে ফাইল পরিবর্তন করে দেয।


sed -i  's/ফারিয়া/তানিয়া/g' love-letter.txt
sed -i '.back' 's/ফারিয়া/তানিয়া/g' love-letter.txt  // ম্যাক ব্যবহারকারীর জন্য 


প্রিয় তানিয়া,
আমি সেড নিয়ে কাজ করতেছি। তানিয়া নাম খুব সুন্দর। আমি তানিয়া এর সাথে সুখ দুঃখ ভাগ করে নিতে চাই। তানিয়া  কি বলে জানতে চাই।

ফাইলে পরিবর্তনের কাজ হয়ে গেছে।


উদাহরণ ৩

রকিব দেখলে সবাইকে এক রকম মেসেজ দিয়ে খুব লাভ হচ্ছে না। এবার সে ঠিক করল যাকে অফার করবে তার স্পেফিক কিছু লিখবে এবং যখন নতুন কারো জন্য ফাইল তৈরী করবে তখন সেই স্পেফিক লাইগুলা মুছে দিবে।তানিয়ার চুল বড় তাই ফাইনাল লেখা ছিল

প্রিয় তানিয়া,
আমি সেড নিয়ে কাজ করতেছি। তানিয়া নাম খুব সুন্দর। আমি তানিয়া এর সাথে সুখ দুঃখ ভাগ করে নিতে চাই। তানিয়া  কি বলে জানতে চাই।

তোমার দীঘল কালো চুলের ঢেউ, আমার কাছে সুনামির মতো লাগে। 


কিন্তু তানিয়া যখন বয়ফ্রেন্ড আছে বলে জানিয়ে দিল, ওকে বয়ফ্রেন্ডথাকতেই পারে। তখন সে লামিয়াকে প্রস্তাব দিবে বলে ঠিক করল। লামিয়ার যেহেতু লম্বা চুল নাই, তাই সাথে শেষ লাইন ডিলিট করে দিতে হবে। নিচের কমান্ড ৪ নাম্বার লাইন ডিলিট করে তানিয়া কে লামিয়া দ্বারা রিপ্লেস করে দিবে। ^তোমার দীঘল দিয়ে শুরু লাইন ও মুছে দেয়া যায়।


sed -i '.back' '4d ; s/তানিয়া/লামিয়া/g' love-letter.txt 
অথবা 
sed -i '.back'  '/^তোমার দীঘল/d ;  s/তানিয়া/লামিয়া/g' love-letter.txt 


উদাহরণ ৪

লামিয়া ওপার থেকে হ্যা বলে দিয়েছে।মিঃ রকিবের সুখের আর সীমা নাই। এখন সে প্রায়ই লামিয়াকে মেসেজ পাঠায়। প্রথম বার লামিয়া বলে, তার পরের বার জান, তার পরের বার পাখি বলে। কিন্তু বার বার লেখা সমস্যা।

প্রিয় লামিয়া, সেড মোটামুটি শিখছি। লামিয়া তুমি কি করো? আমি আমার লামিয়াকে অনেক মিস করি।


তাই সে উপর লেখা ফাইলের উপর নিচের সেড কমান্ড দিয়েদিলো

sed -i '.back' 's/লামিয়া/জান/2; s/লামিয়া/পাখি/2' regular-letter.txt


আউটপুট নিচের মতো আসলো। এখন রকিব ও লামিয়া দুজন্যেই অনেক হ্যাপি।

প্রিয় লামিয়া, সেড মোটামুটি শিখছি। জান তুমি কি করো? আমি আমার পাখিকে অনেক মিস করি।


হ্যাপি সেডিং ....