Blog top image

SED - String processor


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

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


ফাইলের টেক্সট পরিবর্তন করে নতুন ফাইল তৈরি করা 

রকিব নুসরাত কে ভালোবেসে একটা চিঠি দিয়েছে এবং সেটা nusrat.txt ফাইলে সেভ করেছ। 


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

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


sed 's/নুসরাত/ফারিয়া/g' nustar.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 


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