Sed (Stream Editor) দিয়ে looping ব্যবহারের মাধ্যমে আপনি complex text processing বা জটিল টেক্সট প্রক্রিয়াকরণ করতে পারেন। যদিও Sed নিজেই একটি স্ট্রিম এডিটর, তবুও এটি কিছু ধরনের looping প্রক্রিয়া সমর্থন করে, যেমন, একাধিক লাইন বা প্যাটার্নের সাথে কাজ করা এবং পুনরাবৃত্তি করা। Sed এ লুপের মতো আচরণ অর্জন করতে আপনি কিছু কৌশল ব্যবহার করতে পারেন, যেমন n, p, বা ! কমান্ড এবং কয়েকটি প্যাটার্ন মিলিয়ে।
Sed মূলত স্ট্রিমিং এডিটরের কাজ করে এবং তার মধ্যে কোন স্থায়ী লুপিং মেকানিজম নেই, তবে কিছু কমান্ড যেমন n, p, !, এবং loop দিয়ে একটি সিমুলেটেড লুপিং ব্যবহৃত হতে পারে।
Looping এর মাধ্যমে Complex Text Processing
Sed-এর মাধ্যমে complex text processing করতে হলে আপনাকে Pattern Space এবং Hold Space এর মধ্যে ডেটা আদান-প্রদান এবং কিছু লজিকাল প্রক্রিয়া প্রয়োগ করতে হয়।
1. n কমান্ড দিয়ে লুপিং
n কমান্ড Sed এর মধ্যে টেক্সট স্ট্রিম থেকে পরবর্তী লাইনটি Pattern Space-এ নিয়ে আসে। এটি একটি ধরনের লুপিং তৈরি করতে সহায়তা করে যেখানে একাধিক লাইন প্রক্রিয়া করা হয়।
n কমান্ডের উদাহরণ:
sed 'n; s/foo/bar/' file.txtএই কমান্ডটি:
n: প্রথম লাইন প্রক্রিয়া করার পর পরবর্তী লাইনে চলে যাবে।s/foo/bar/: পরবর্তী লাইনটি প্রক্রিয়া করে "foo" শব্দটিকে "bar"-এ পরিবর্তন করবে।
এটি ফাইলে একাধিক লাইনের মধ্যে পরিবর্তন আনতে ব্যবহৃত হতে পারে, বিশেষত যখন আপনি প্রতিটি লাইনের পরবর্তী একটি নির্দিষ্ট কাজ করতে চান।
2. p কমান্ড দিয়ে লুপিং
p কমান্ডের মাধ্যমে আপনি আউটপুটে পুনরাবৃত্তি করতে পারেন। উদাহরণস্বরূপ, আপনি যদি একটি প্যাটার্ন খুঁজে সব মিল পাওয়া লাইনের আউটপুটে পুনরাবৃত্তি করতে চান, তবে এই কমান্ডটি ব্যবহার করতে পারেন:
sed -n '/pattern/{p; n}' file.txtএটি:
p: প্যাটার্ন মিলে এমন লাইনটি আউটপুট হিসেবে দেখাবে।n: পরবর্তী লাইনটি Pattern Space-এ নিয়ে যাবে এবং আবার প্রক্রিয়া করবে।
এটি এক ধরনের লুপিং তৈরির জন্য কাজ করে, যেখানে প্রতি লাইন একে একে আউটপুট হিসেবে প্রদর্শিত হয়।
3. ! কমান্ড দিয়ে লুপিং
! কমান্ড Sed-এ একটি প্যাটার্নের বাইরে থাকা লাইনগুলোকে প্রক্রিয়া করতে ব্যবহৃত হয়। এটি এক ধরনের ফিল্টারিং মেকানিজম যেখানে আপনি প্যাটার্নের সাথে মিল না পাওয়া লাইনগুলো নিয়ে কাজ করতে পারেন।
! কমান্ডের উদাহরণ:
sed '/pattern/!{s/foo/bar/; p}' file.txtএটি:
/pattern/!: যেসব লাইন "pattern"-এর সাথে মিলবে না, সেগুলো প্রক্রিয়া করা হবে।s/foo/bar/: "foo" শব্দটি "bar"-এ পরিবর্তন করবে।p: পরবর্তী আউটপুট হিসেবে প্রিন্ট করবে।
এটি কোন নির্দিষ্ট প্যাটার্ন বাদে বাকি সব লাইনগুলো প্রক্রিয়া করতে সাহায্য করে।
4. Pattern Space এবং Hold Space দিয়ে Looping
Pattern Space এবং Hold Space এর মধ্যে তথ্য আদান-প্রদান এবং প্রক্রিয়া করতে Sed এর মাধ্যমে লুপিং করা যেতে পারে। এখানে আপনি h, g, n কমান্ডগুলোর সাথে একাধিক পরিবর্তন করতে পারেন।
Hold Space এবং Pattern Space দিয়ে লুপিং:
ধরা যাক, আপনি একটি ফাইলে সমস্ত লাইনগুলির মধ্যে একটি নির্দিষ্ট প্যাটার্ন অনুসন্ধান করতে চান এবং প্রতিটি লাইনের শেষে সেটি যোগ করতে চান।
sed ':a; /pattern/!{N; ba}; s/\n/\ /g' file.txtএটি:
:a: একটি লেবেল তৈরি করবে, যেটি লুপের শুরু।/pattern/!{N; ba}: যেগুলোর মধ্যে প্যাটার্ন নেই, সেগুলোকেNকমান্ডের মাধ্যমে পরবর্তী লাইন ধরে রেখে,baলেবেলে লুপ করবে।s/\n/\ /g: সব newline চরিত্রকে একটি স্পেসে প্রতিস্থাপন করবে।
এটি সমস্ত লাইনগুলো একত্রিত করার জন্য একটি লুপিং লজিক তৈরি করবে এবং তারপর পুরো টেক্সটটি একত্রে একটি লাইন হিসেবে সংযুক্ত করবে।
5. Looping Using while Shell Loop with Sed
একটি while loop ব্যবহার করে Sed এর সাথে লুপিংও করা যেতে পারে। যদিও Sed নিজেই লুপিং সাপোর্ট করে না, তবে shell script এর সাহায্যে Sed কমান্ডের মধ্যে লুপিং যুক্ত করা সম্ভব।
Shell Loop Example:
while read line; do
echo "$line" | sed 's/foo/bar/'
done < file.txtএটি:
whileলুপের মাধ্যমে একটি লাইনের জন্য Sed এর পরিবর্তন প্রক্রিয়া করবে এবং তা আউটপুট করবে।
6. Looping with Multiple sed Commands
এছাড়াও আপনি একাধিক Sed কমান্ড ব্যবহার করে লুপিং কার্যকর করতে পারেন:
sed '1,4s/foo/bar/' file.txt | sed '5,8s/baz/qux/'এটি প্রথম ৪ লাইনকে "foo" থেকে "bar" তে পরিবর্তন করবে, তারপর পরবর্তী ৪ লাইনে "baz" থেকে "qux" তে পরিবর্তন করবে।
Conclusion
Sed এ লুপিং প্রক্রিয়া সরাসরি সমর্থন না করলেও, বিভিন্ন কৌশল যেমন n, p, !, এবং Pattern Space/ Hold Space এর মধ্যে তথ্য আদান-প্রদান, এবং Shell script এর মাধ্যমে লুপিং বাস্তবায়ন করা সম্ভব। এই পদ্ধতিগুলির মাধ্যমে আপনি complex text processing করতে পারবেন, যেমন একাধিক লাইন প্রক্রিয়া করা, লাইনগুলোর মধ্যে পরিবর্তন করা, এবং পুনরাবৃত্তি করে কাজ করা।
Read more