Sed (Stream Editor) টুলে Regular Expressions (রেগুলার এক্সপ্রেশন) ব্যবহার করা হয় টেক্সট ফাইল বা স্ট্রিমের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে এবং সেগুলোর সাথে ম্যাচিং করার জন্য। রেগুলার এক্সপ্রেশন বা regex একটি শক্তিশালী টুল যা বিশেষ চরিত্রের সংমিশ্রণ দিয়ে টেক্সটের বিভিন্ন প্যাটার্ন অনুসন্ধান এবং পরিবর্তন করতে ব্যবহৃত হয়।
Sed এ Regular Expression ব্যবহার করে Matching
Sed এর সাহায্যে আপনি রেগুলার এক্সপ্রেশন ব্যবহার করে টেক্সট ফাইল বা স্ট্রিমে প্যাটার্নের সাথে মিল খুঁজে বের করতে পারেন এবং পরিবর্তন করতে পারেন। Sed আসলে POSIX compliant রেগুলার এক্সপ্রেশন সমর্থন করে, যার মানে এটি Basic Regular Expression (BRE) এবং Extended Regular Expression (ERE) উভয়টাই সমর্থন করে।
Sed এ রেগুলার এক্সপ্রেশন সিনট্যাক্স
Sed এর মধ্যে রেগুলার এক্সপ্রেশন ব্যবহারের জন্য সাধারণ সিনট্যাক্সটি হল:
sed 's/regular_expression/replacement/' file.txtএখানে:
regular_expression: এটি যে প্যাটার্নটি আপনি খুঁজতে চান, তা হতে হবে রেগুলার এক্সপ্রেশন।replacement: এটি হলো সেই টেক্সট যা আপনি প্যাটার্নের জায়গায় বসাতে চান।file.txt: এটি হলো সেই ফাইল যেখানে আপনি রেগুলার এক্সপ্রেশন অনুসারে পরিবর্তন করতে চান।
Sed এ রেগুলার এক্সপ্রেশন এর কিছু সাধারণ প্যাটার্ন
^(Caret): এটি লাইনের শুরুতে মিলানো প্যাটার্ন নির্দেশ করে।উদাহরণ: যদি আপনি "cat" শব্দটি যে কোনো লাইন এর শুরুতে থাকে তা খুঁজতে চান, তাহলে:
sed '/^cat/p' file.txt$(Dollar): এটি লাইনের শেষে মিলানো প্যাটার্ন নির্দেশ করে।উদাহরণ: যদি আপনি "dog" শব্দটি যেসব লাইন এর শেষে থাকে তা খুঁজতে চান, তাহলে:
sed '/dog$/p' file.txt.(Dot): এটি যেকোনো একক চরিত্রের সাথে মিলিয়ে থাকে।উদাহরণ: "c.t" প্যাটার্নটি "cat", "cot", "cut" ইত্যাদি শব্দের সাথে মিলবে:
sed '/c.t/p' file.txt*(Asterisk): এটি পূর্ববর্তী চরিত্রটির যেকোনো সংখ্যা (শূন্য বা তার বেশি) ম্যাচ করে।উদাহরণ: "ca*t" প্যাটার্নটি "ct", "cat", "caaat" ইত্যাদি সব মিলাবে:
sed '/ca*t/p' file.txt[](Square Brackets): এটি নির্দিষ্ট চরিত্রগুলির একটির সাথে মিলায়।উদাহরণ:
[aeiou]প্যাটার্নটি যে কোনো স্বরবর্ণের সাথে মিলবে:sed '/[aeiou]/p' file.txt^and$Combined: যদি আপনি একটি নির্দিষ্ট শব্দের শুরু এবং শেষ দুটোই মিলাতে চান, তাহলে আপনি^এবং$একত্রে ব্যবহার করতে পারেন।উদাহরণ: যদি আপনি শুধুমাত্র "dog" শব্দটি যেগুলি লাইন শুরু এবং শেষ উভয় জায়গায় রয়েছে তা খুঁজতে চান, তাহলে:
sed '/^dog$/p' file.txt[^ ](Negation inside Square Brackets): এটি একটি নির্দিষ্ট চরিত্র বাদে অন্য কিছু ম্যাচ করে।উদাহরণ:
[a-z]এর মাধ্যমে সব ছোট হাতের অক্ষর খুঁজতে পারেন, তবে[^a-z]দ্বারা সব বড় হাতের অক্ষর, সংখ্যা বা বিশেষ চিহ্ন খুঁজে পেতে পারেন:sed '/[^a-z]/p' file.txt\(Backslash): রেগুলার এক্সপ্রেশন স্নিপেটের মধ্যে কিছু বিশেষ চরিত্রের অর্থ থাকে, যেমন.,*,^,$ইত্যাদি। এদের ব্যবহার এড়াতে, এদের আগে\ব্যাকস্ল্যাশ ব্যবহার করা হয়।উদাহরণ: যদি আপনি একটি ডট (.) চরিত্রের সাথে মেলানো চান, তাহলে:
sed '/\./p' file.txt()and\1(Grouping and Backreferencing): আপনি একটি প্যাটার্ন গ্রুপ করে রাখতে পারেন এবং সেই গ্রুপের মান পরবর্তীতে ব্যবহার করতে পারেন।উদাহরণ: আপনি যদি একাধিক শব্দের মধ্যে মিল খুঁজে একটি নির্দিষ্ট অংশকে রিপ্লেস করতে চান, তবে
()দিয়ে গ্রুপিং এবং\1দিয়ে ব্যাকরেফারেন্স ব্যবহার করতে পারেন।sed 's/\(dog\) and \(cat\)/\2 and \1/' file.txtএটি "dog and cat" এর জায়গায় "cat and dog" করবে।
Sed এ রেগুলার এক্সপ্রেশন দিয়ে Matching এর উদাহরণ
লাইনের শুরুতে প্যাটার্ন খুঁজে বের করা: "cat" শব্দটি যেসব লাইন শুরুতে রয়েছে, সেগুলো খুঁজে বের করতে:
sed -n '/^cat/p' file.txtলাইনের মধ্যে নির্দিষ্ট শব্দ খুঁজে বের করা: "dog" শব্দটি যে কোনো স্থানে থাকে, সেটি খুঁজে বের করতে:
sed -n '/dog/p' file.txtলাইনের শেষে প্যাটার্ন খুঁজে বের করা: "fish" শব্দটি যেসব লাইনের শেষে রয়েছে, সেগুলো খুঁজে বের করতে:
sed -n '/fish$/p' file.txtবিশেষ চরিত্রের সাথে মিলানো: "c.t" যেকোনো টেক্সট যেগুলির মধ্যে একটি চরিত্র এবং "c" এবং "t" থাকবে, সেগুলো খুঁজে বের করতে:
sed -n '/c.t/p' file.txtনেগেটিভ প্যাটার্ন Matching: সব লাইন যেগুলোর মধ্যে "a" বা "e" নেই, সেগুলো খুঁজে বের করতে:
sed -n '/[^aeiou]/p' file.txt
Conclusion
Sed এর মাধ্যমে রেগুলার এক্সপ্রেশন ব্যবহার করে আপনি যেকোনো ধরনের টেক্সট বা স্ট্রিমের মধ্যে প্যাটার্নের সাথে ম্যাচিং করতে পারবেন। এটি বিশেষভাবে ব্যবহারিক যখন আপনাকে ফাইলের মধ্যে নির্দিষ্ট তথ্য খুঁজে বের করতে হয় এবং দ্রুত পরিবর্তন করতে হয়। রেগুলার এক্সপ্রেশন আপনাকে খুবই শক্তিশালী টেক্সট ম্যানিপুলেশন করতে সক্ষম করে, যেমন ফাইল বিশ্লেষণ, লগ ফাইল প্রসেসিং, বা ডেটা কনভার্সন।
Read more