Regular Expressions (রেগুলার এক্সপ্রেশন) এবং Pattern Matching (প্যাটার্ন ম্যাচিং) হল এমন একটি শক্তিশালী পদ্ধতি যা টেক্সট ম্যানিপুলেশন এবং ডেটা প্রক্রিয়াকরণের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এগুলি বিশেষ করে Sed, awk, grep এবং অন্যান্য টুলে ব্যবহার করা হয়, যা টেক্সট ফাইলে বা স্ট্রিমে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে এবং সেই প্যাটার্নের সাথে সম্পর্কিত কাজ করতে সহায়তা করে।
রেগুলার এক্সপ্রেশন (Regular Expressions)
রেগুলার এক্সপ্রেশন হল এমন একটি প্যাটার্ন যা একটি স্ট্রিং বা টেক্সটের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি একটি টেক্সট ফাইল বা স্ট্রিমের মধ্যে বিশেষ ধরনের শব্দ, চিহ্ন, বা চরিত্রের অনুসন্ধান এবং প্রতিস্থাপন করতে ব্যবহৃত হয়।
রেগুলার এক্সপ্রেশন এর মূল উপাদান
- লিটারেল (Literal):
রেগুলার এক্সপ্রেশনগুলিতে লিটারেল ব্যবহার করা হয় যার মানে হল যে আপনি সরাসরি কোনো নির্দিষ্ট চরিত্রের অনুসন্ধান করছেন। উদাহরণস্বরূপ,/cat/হল একটি লিটারেল প্যাটার্ন, যা "cat" শব্দকে খুঁজে বের করবে। - মেটাচরিত্র (Metacharacters):
রেগুলার এক্সপ্রেশনগুলিতে কিছু বিশেষ চরিত্র থাকে যেগুলি প্যাটার্ন খোঁজার জন্য বিশেষ কার্যকর হয়। এগুলিকে মেটাচরিত্র বলা হয়।- . (ডট): যেকোনো একক অক্ষর (কোনো নির্দিষ্ট চরিত্র নয়)।
- উদাহরণ:
c.tএর মানে হলো "c" এবং "t" এর মধ্যে যেকোনো একক অক্ষর থাকতে পারে, যেমন "cat", "cot", "cut"।
- উদাহরণ:
- ^ (হ্যাট): স্ট্রিং এর শুরুতে থাকা প্যাটার্ন।
- উদাহরণ:
^catহল এমন প্যাটার্ন যা শুধু স্ট্রিংয়ের শুরুতে "cat" খুঁজে।
- উদাহরণ:
- $ (ডলার সাইন): স্ট্রিং এর শেষের প্যাটার্ন।
- উদাহরণ:
cat$হল এমন প্যাটার্ন যা শুধুমাত্র "cat" শব্দটিকে স্ট্রিংয়ের শেষে খুঁজে বের করবে।
- উদাহরণ:
- [] (ব্র্যাকেট): কোনো নির্দিষ্ট অক্ষরের একটি সেট।
- উদাহরণ:
[cC]atএর মানে হলো "cat" অথবা "Cat"।
- উদাহরণ:
- [^] (ক্যারেট ব্র্যাকেট): কোনো নির্দিষ্ট অক্ষরের সেটের বাইরের সব কিছু।
- উদাহরণ:
[^0-9]এটি কোনো অক্ষর বা চরিত্র খুঁজে বের করবে যা সংখ্যা নয়।
- উদাহরণ:
- *** (এস্টেরিক্স)**: পূর্ববর্তী চরিত্র বা প্যাটার্নের শূন্য বা একাধিক পুনরাবৃত্তি।
- উদাহরণ:
ca*tএটি "cat", "caat", "caaat" ইত্যাদি সবকিছুকে মেলাবে।
- উদাহরণ:
- + (প্লাস): পূর্ববর্তী চরিত্র বা প্যাটার্নের এক বা একাধিক পুনরাবৃত্তি।
- উদাহরণ:
ca+tএটি "cat", "caat", "caaat" ইত্যাদি মেলাবে, কিন্তু "ct" মেলাবে না।
- উদাহরণ:
- ? (কোয়েশ্চন মার্ক): পূর্ববর্তী চরিত্রের শূন্য বা একবার উপস্থিতি।
- উদাহরণ:
ca?tএটি "cat" অথবা "ct" মেলাবে।
- উদাহরণ:
- {n} (কোয়ান্টিফায়ার): পূর্ববর্তী চরিত্রের ঠিক n বার পুনরাবৃত্তি।
- উদাহরণ:
a{3}এটি "aaa" মেলাবে, কিন্তু "aa" মেলাবে না।
- উদাহরণ:
- . (ডট): যেকোনো একক অক্ষর (কোনো নির্দিষ্ট চরিত্র নয়)।
- রূপান্তর (Escaping):
কিছু মেটাচরিত্র যদি লিটারেল চরিত্র হিসাবে ব্যবহার করতে হয়, তবে সেগুলিকে ব্যাকস্ল্যাশ (\) দ্বারা এস্কেপ করতে হয়। উদাহরণস্বরূপ, ডট (.) যদি লিটারেল ডট হিসাবে ব্যবহার করতে চান, তবে এটি\.হয়ে যাবে।
প্যাটার্ন ম্যাচিং (Pattern Matching)
Pattern Matching হল রেগুলার এক্সপ্রেশন ব্যবহার করে একটি নির্দিষ্ট প্যাটার্ন খুঁজে বের করার প্রক্রিয়া। এটি টেক্সট বা ডেটাতে একটি নির্দিষ্ট অনুসন্ধান এবং মেলানো প্রক্রিয়া।
যেমন, Sed বা grep-এর মতো টুলে আপনি প্যাটার্ন ম্যাচিং ব্যবহার করে টেক্সট ফাইলের মধ্যে একটি নির্দিষ্ট প্যাটার্ন বা শব্দ খুঁজে বের করতে পারেন।
Sed এ প্যাটার্ন ম্যাচিং
Sed এ প্যাটার্ন ম্যাচিং করার জন্য রেগুলার এক্সপ্রেশন ব্যবহার করা হয়। উদাহরণস্বরূপ, আপনি যদি একটি ফাইলে সব "cat" শব্দের পরিবর্তে "dog" রাখতে চান, তাহলে Sed এ প্যাটার্ন ম্যাচিং করতে পারেন।
সিনট্যাক্স:
sed 's/pattern/replacement/' file.txtউদাহরণ:
sed 's/cat/dog/g' file.txtএটি file.txt ফাইলে "cat" শব্দগুলোকে "dog"-এ প্রতিস্থাপন করবে।
grep এর মাধ্যমে প্যাটার্ন ম্যাচিং
grep হল আরেকটি জনপ্রিয় টুল যা রেগুলার এক্সপ্রেশন ব্যবহার করে প্যাটার্ন ম্যাচিং করে। আপনি এর মাধ্যমে ফাইল বা স্ট্রিমের মধ্যে একটি নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে পারেন।
সিনট্যাক্স:
grep 'pattern' file.txtউদাহরণ:
grep 'cat' file.txtএটি file.txt ফাইলে "cat" শব্দটি খুঁজে বের করবে এবং যে লাইনগুলোতে "cat" রয়েছে, সেগুলি প্রদর্শন করবে।
grep এ রেগুলার এক্সপ্রেশন ব্যবহার
আপনি আরও জটিল প্যাটার্ন খুঁজে বের করার জন্য grep এ রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন।
উদাহরণ:
grep '^[a-zA-Z]' file.txtএটি file.txt ফাইলে এমন সমস্ত লাইন প্রদর্শন করবে যেগুলো ইংরেজি বর্ণ দিয়ে শুরু হয়।
রেগুলার এক্সপ্রেশন এবং প্যাটার্ন ম্যাচিং এর প্রয়োগ
- টেক্সট ফাইল থেকে নির্দিষ্ট শব্দ খুঁজে বের করা:
grepব্যবহার করে আপনি নির্দিষ্ট শব্দ বা প্যাটার্ন খুঁজে বের করতে পারেন। - ফাইলের মধ্যে টেক্সট প্রতিস্থাপন:
Sed ব্যবহার করে আপনি টেক্সট ফাইলের মধ্যে প্যাটার্ন খুঁজে প্রতিস্থাপন করতে পারেন। - ডেটা ভ্যালিডেশন:
রেগুলার এক্সপ্রেশন ব্যবহার করে আপনি ডেটা ভ্যালিডেশন যেমন ইমেইল, ফোন নাম্বার, পিন কোড ইত্যাদি পরীক্ষা করতে পারেন। - টেক্সট ফিল্টারিং:
রেগুলার এক্সপ্রেশন ব্যবহার করে আপনি বিভিন্ন ধরনের টেক্সট ফিল্টার করতে পারেন যেমন কোনো নির্দিষ্ট প্যাটার্নের ওপর ভিত্তি করে শুধুমাত্র কিছু তথ্য বের করা।
সারাংশ
রেগুলার এক্সপ্রেশন হল একটি অত্যন্ত শক্তিশালী টুল যা টেক্সট বা ডেটার মধ্যে একটি নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে সাহায্য করে। Pattern Matching রেগুলার এক্সপ্রেশন ব্যবহার করে টেক্সট ফাইলে বা স্ট্রিমে প্যাটার্ন অনুসন্ধান করা হয়। আপনি Sed, grep, এবং অন্যান্য টুলে রেগুলার এক্সপ্রেশন ব্যবহার করে অনেক ধরনের কাজ যেমন টেক্সট পরিবর্তন, ডেটা ভ্যালিডেশন, এবং প্যাটার্ন অনুসন্ধান করতে পারেন।
Basic Regular Expressions (BRE) হল একটি প্যাটার্ন মাচিং ভাষা যা সাধারণত Unix সিস্টেমে ব্যবহৃত হয়, বিশেষত কমান্ড লাইন টুল যেমন sed এবং grep এ। এটি আপনাকে টেক্সট বা স্ট্রিমের মধ্যে বিশেষ প্যাটার্ন খুঁজে বের করতে, পরিবর্তন করতে এবং সংক্ষেপে অনেক ধরনের টেক্সট প্রক্রিয়াকরণ করতে সহায়তা করে।
Basic Regular Expressions (BRE) এর মৌলিক ধারণা
Regular Expressions (RegEx) হলো একটি টেক্সট প্যাটার্ন যা কিছু নির্দিষ্ট নিয়ম বা প্যাটার্নের মাধ্যমে টেক্সট খুঁজে বের করে বা পরিবর্তন করতে ব্যবহৃত হয়। Basic Regular Expressions (BRE) হল RegEx-এর একটি প্রাথমিক সংস্করণ, যা সাধারণভাবে একটি টেক্সট প্যাটার্নে কিছু নির্দিষ্ট অক্ষর, সংখ্যা বা চিহ্নের সাথে মিলে যায় এমন কিছু খুঁজে বের করে।
BRE এর সাধারণ ব্যবহার
BRE ব্যবহারের মূল উদ্দেশ্য হল একটি নির্দিষ্ট প্যাটার্ন অনুসারে টেক্সট খোঁজা এবং সেই প্যাটার্নের সাথে মিল পাওয়া টেক্সট বা লাইন গুলির উপর অপারেশন চালানো।
1. অক্ষরের ম্যাচিং
বেসিক অক্ষর: এটি সরাসরি টেক্সটে সেই অক্ষরটি খুঁজে বের করে।
উদাহরণ:
- প্যাটার্ন:
cat - এটি "cat" শব্দের সাথে মেলে এমন টেক্সট খুঁজে বের করবে।
- প্যাটার্ন:
ডট (.): যেকোনো একক অক্ষর মেলানোর জন্য
.ব্যবহার করা হয়। এটি নতুন লাইন ছাড়া যেকোনো এক অক্ষরকে মেলাতে পারে।উদাহরণ:
- প্যাটার্ন:
c.t - এটি "cat", "cot", "cut" ইত্যাদির সাথে মেলে।
- প্যাটার্ন:
2. ক্যারেক্টার ক্লাস
ক্যারেক্টার ক্লাস আপনাকে একটি নির্দিষ্ট অক্ষরের মধ্যে প্যাটার্ন মিলাতে সাহায্য করে। সাধারণত স্কয়ার ব্র্যাকেট ([]) ব্যবহার করা হয়।
[abc]: এটি
a,b, অথবাcযেকোনো একটি অক্ষর মেলাতে ব্যবহার হয়।উদাহরণ:
- প্যাটার্ন:
[aeiou] - এটি যেকোনো একটি ভোকাল (যেমন 'a', 'e', 'i', 'o', 'u') খুঁজে বের করবে।
- প্যাটার্ন:
[^abc]: এটি
a,b, অথবাcবাদে যেকোনো অক্ষর মেলাবে।উদাহরণ:
- প্যাটার্ন:
[^0-9] - এটি যেকোনো অক্ষর খুঁজে বের করবে যা সংখ্যা নয়।
- প্যাটার্ন:
3. কুয়ানটিফায়ার
BRE এ কিছু কুয়ানটিফায়ার ব্যবহার করা হয় যা টেক্সটে নির্দিষ্ট সংখ্যক অক্ষরের পুনরাবৃত্তি নির্দেশ করে:
*: পূর্ববর্তী অক্ষরটির শূন্য বা একাধিক পুনরাবৃত্তি নির্দেশ করে।
উদাহরণ:a*এটি শূন্য বা একাধিক "a" খুঁজে বের করবে।^: এটি লাইনের শুরু নির্দেশ করে।
উদাহরণ:^abcএটি সেই লাইনে খুঁজে বের করবে যেখানে "abc" প্রথমে আসে।$: এটি লাইনের শেষ নির্দেশ করে।
উদাহরণ:abc$এটি সেই লাইনে খুঁজে বের করবে যেখানে "abc" শেষ হয়ে থাকে।{n}: এটি একটি নির্দিষ্ট সংখ্যক পুনরাবৃত্তি নির্দেশ করে।
উদাহরণ:a{3}এটি "aaa" মেলাবে, কিন্তু "aa" বা "aaaa" নয়।{n,m}: এটি নির্দিষ্ট সংখ্যক পুনরাবৃত্তির মধ্যে সীমাবদ্ধ।
উদাহরণ:a{2,4}এটি "aa", "aaa", অথবা "aaaa" মেলাবে।
4. গ্রুপিং এবং আল্টারনেশন
(): এটি একটি গ্রুপ তৈরি করতে ব্যবহৃত হয়, যা একত্রে একটি ইউনিট হিসেবে কাজ করে।উদাহরণ:
- প্যাটার্ন:
(abc)+ - এটি "abc" একাধিকবার পুনরাবৃত্তি হবে এমন মেলানোর জন্য ব্যবহৃত হবে।
- প্যাটার্ন:
|: এটি OR অপারেটরের মতো কাজ করে, যার মানে আপনি একাধিক প্যাটার্নের মধ্যে যে কোনো একটি মেলাতে পারেন।উদাহরণ:
- প্যাটার্ন:
cat|dog - এটি "cat" অথবা "dog" মেলাবে।
- প্যাটার্ন:
5. Escape Character
কিছু চরিত্র যেমন *, . ইত্যাদি যখন প্যাটার্নের অংশ হিসেবে ব্যবহৃত হয় তখন এগুলিকে escape করতে হয়।
\: এটি বিশেষ চরিত্রগুলিকে সাধারণ অক্ষরের মতো ব্যবহার করতে সহায়তা করে।
উদাহরণ:\.এটি একটি ডট (.) চিহ্ন খুঁজে বের করবে, না যে কোনো একক অক্ষর।
6. সঞ্চয় এবং পদ্ধতি
\n: এটি পূর্ববর্তী গ্রুপের পুনরাবৃত্তি বা সঞ্চয় করার জন্য ব্যবহৃত হয়।উদাহরণ:
- প্যাটার্ন:
\(abc\)\1 - এটি "abcabc" খুঁজে বের করবে, যেখানে
\(abc\)প্রথম গ্রুপ এবং\1দ্বিতীয় গ্রুপ, যা প্রথম গ্রুপের সাথে মেলে।
- প্যাটার্ন:
BRE এর কিছু সাধারণ ব্যবহার উদাহরণ
"cat" শব্দের সাথে মেলা:
echo "The cat sat on the mat" | sed 's/cat/dog/'এটি প্রথম "cat" শব্দটিকে "dog"-এ পরিবর্তন করবে।
কোনো ভোকাল (a, e, i, o, u) খুঁজে বের করা:
echo "apple" | sed 's/[aeiou]/X/g'এটি "apple" এর সমস্ত ভোকাল অক্ষরকে "X"-এ পরিবর্তন করবে, যার ফলাফল হবে "XpplX"।
লাইনের প্রথম অংশে কোনো প্যাটার্ন মেলা:
echo "abc xyz" | sed '/^abc/s/xyz/123/'এটি সেই লাইনের "abc" প্যাটার্ন খুঁজে "xyz"-এর পরিবর্তে "123" প্রতিস্থাপন করবে।
সারাংশ
Basic Regular Expressions (BRE) একটি শক্তিশালী টুল যা আপনাকে টেক্সট খুঁজে বের করতে, বিশ্লেষণ করতে এবং পরিবর্তন করতে সাহায্য করে। BRE এর মধ্যে সহজ প্যাটার্ন মাচিং, ক্যারেক্টার ক্লাস, কুয়ানটিফায়ার, গ্রুপিং, এবং আরো অনেক শক্তিশালী ফিচার অন্তর্ভুক্ত রয়েছে যা বিশেষভাবে Unix/Linux কমান্ড লাইন টুলগুলিতে ব্যবহৃত হয়, যেমন sed, grep, ইত্যাদি। Regular Expressions-এর মাধ্যমে টেক্সট ম্যানিপুলেশন অনেক সহজ এবং কার্যকর হয়ে ওঠে।
Sed (Stream Editor) এবং Regular Expressions (রেগুলার এক্সপ্রেশন) ব্যবহারে special characters অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি আপনাকে বিভিন্ন ধরনের প্যাটার্ন এবং টেক্সট পরিবর্তন করতে সাহায্য করে। এই বিশেষ চরিত্রগুলি রেগুলার এক্সপ্রেশনকে আরো শক্তিশালী এবং নমনীয় করে তোলে।
নিচে Sed এবং Regular Expressions এ ব্যবহৃত কিছু সাধারণ বিশেষ চরিত্র (special characters) এবং তাদের ব্যবহার দেওয়া হল।
Sed এবং Regular Expressions এ ব্যবহৃত Special Characters
.(Dot)- ব্যবহার: যেকোনো একক চরিত্রের সাথে ম্যাচ করে।
- উদাহরণ:
c.tপ্যাটার্নটি "cat", "cot", "cut" ইত্যাদি শব্দগুলির সাথে মিলবে, কারণ প্রতিটি শব্দের মধ্যে "c" এবং "t" থাকবে, এবং.কোনো একক চরিত্রের সাথে মিলবে। কমান্ড:
sed -n '/c.t/p' file.txt
*(Asterisk)- ব্যবহার: পূর্ববর্তী চরিত্রটি শূন্য বা তার অধিকবার ম্যাচ করে। এটি মূলত কোনো একটি চরিত্রের রিপিটেশন নির্দেশ করে।
- উদাহরণ:
ca*tপ্যাটার্নটি "ct", "cat", "caaat" ইত্যাদি শব্দগুলির সাথে মিলবে, কারণ এখানে "a" এক বা একাধিক বার থাকতে পারে। কমান্ড:
sed -n '/ca*t/p' file.txt
^(Caret)- ব্যবহার: এটি লাইনের শুরুতে প্যাটার্ন মিলানোর জন্য ব্যবহৃত হয়।
- উদাহরণ:
^catপ্যাটার্নটি শুধুমাত্র সেই লাইনগুলো খুঁজে যেগুলি "cat" দিয়ে শুরু হয়। কমান্ড:
sed -n '/^cat/p' file.txt
$(Dollar)- ব্যবহার: এটি লাইনের শেষে প্যাটার্ন মিলানোর জন্য ব্যবহৃত হয়।
- উদাহরণ:
dog$প্যাটার্নটি শুধুমাত্র সেই লাইনগুলো খুঁজে যেগুলি "dog" দিয়ে শেষ হয়। কমান্ড:
sed -n '/dog$/p' file.txt
[](Square Brackets)- ব্যবহার: এটি একটি সেটের মধ্যে থাকা যেকোনো একক চরিত্রের সাথে মিলাতে ব্যবহৃত হয়।
- উদাহরণ:
[aeiou]প্যাটার্নটি যেকোনো স্বরবর্ণের সাথে মিলবে।[0-9]প্যাটার্নটি যেকোনো ডিজিটের সাথে মিলবে। কমান্ড:
sed -n '/[aeiou]/p' file.txt # Find lines containing vowels
[^ ](Caret inside Square Brackets)- ব্যবহার: এটি একটি সেটের মধ্যে থাকা কোনো একটি নির্দিষ্ট চরিত্র বাদে বাকি সব কিছু মিলাতে ব্যবহৃত হয়।
- উদাহরণ:
[^a-z]প্যাটার্নটি সব অক্ষর বাদে ছোট হাতের অক্ষর খুঁজে বের করবে। কমান্ড:
sed -n '/[^a-z]/p' file.txt # Find lines not containing lowercase letters
()(Parentheses)- ব্যবহার: এটি একটি গ্রুপ তৈরি করতে ব্যবহৃত হয়, যা পরে ব্যাকরেফারেন্স হিসেবে ব্যবহৃত হতে পারে।
- উদাহরণ:
(dog|cat)প্যাটার্নটি "dog" অথবা "cat" এর সাথে মিলে যাবে। কমান্ড:
sed -n '/\(dog\|cat\)/p' file.txt
\(Backslash)- ব্যবহার: এটি বিশেষ চরিত্রগুলোকে সাধারণ চরিত্র হিসেবে ব্যবহৃত হতে নির্দেশ দেয়। যখন আপনি রেগুলার এক্সপ্রেশন এ কোনো বিশেষ চরিত্র ব্যবহার করতে চান, তখন এর আগে ব্যাকস্ল্যাশ (
\) ব্যবহার করতে হয়। - উদাহরণ: যদি আপনি একটি ডট (
.) চরিত্রের সাথে মিলাতে চান, তাহলে\.ব্যবহার করতে হবে। কমান্ড:
sed -n '/\./p' file.txt # Find lines containing a dot
- ব্যবহার: এটি বিশেষ চরিত্রগুলোকে সাধারণ চরিত্র হিসেবে ব্যবহৃত হতে নির্দেশ দেয়। যখন আপনি রেগুলার এক্সপ্রেশন এ কোনো বিশেষ চরিত্র ব্যবহার করতে চান, তখন এর আগে ব্যাকস্ল্যাশ (
|(Pipe)- ব্যবহার: এটি OR অপারেটর হিসেবে কাজ করে, অর্থাৎ একাধিক প্যাটার্নের মধ্যে মিল খুঁজে।
- উদাহরণ:
(cat|dog)প্যাটার্নটি "cat" অথবা "dog"-এর সাথে মিলে যাবে। কমান্ড:
sed -n '/\(cat\|dog\)/p' file.txt
+(Plus)- ব্যবহার: এটি পূর্ববর্তী চরিত্রটি একবার বা তার বেশি সংখ্যক বার ম্যাচ করবে। (এটি Extended Regular Expression এ ব্যবহৃত হয়।)
- উদাহরণ:
ca+tপ্যাটার্নটি "cat", "caat", "caaat" ইত্যাদি শব্দগুলির সাথে মিলবে। কমান্ড:
sed -n '/ca\+t/p' file.txt
?(Question Mark)- ব্যবহার: এটি পূর্ববর্তী চরিত্রটির 0 বা 1 বার ম্যাচ করবে। (এটি Extended Regular Expression এ ব্যবহৃত হয়।)
- উদাহরণ:
ca?tপ্যাটার্নটি "ct" অথবা "cat" এর সাথে মিলবে। কমান্ড:
sed -n '/ca?t/p' file.txt
{}(Curly Braces)- ব্যবহার: এটি পূর্ববর্তী চরিত্রটি নির্দিষ্ট সংখ্যক বার ম্যাচ করার জন্য ব্যবহৃত হয়। (এটি Extended Regular Expression এ ব্যবহৃত হয়।)
- উদাহরণ:
a{2,4}প্যাটার্নটি "aa", "aaa", "aaaa" এর সাথে মিলবে। কমান্ড:
sed -n '/a\{2,4\}/p' file.txt
Sed এবং Regular Expressions এর Special Characters এর সারাংশ
.: যেকোনো একক চরিত্রের সাথে মিলিয়ে থাকে।*: পূর্ববর্তী চরিত্রের শূন্য বা তার বেশি পুনরাবৃত্তি।^: লাইনের শুরুতে মিলানো প্যাটার্ন।$: লাইনের শেষে মিলানো প্যাটার্ন।[]: নির্দিষ্ট এক বা একাধিক চরিত্রের মধ্যে কোনো একটি মিলানো।[^ ]: নির্দিষ্ট চরিত্র বাদে অন্য সব কিছু মিলানো।(): গ্রুপিং, পরে ব্যাকরেফারেন্স ব্যবহার করা যায়।\: বিশেষ চরিত্রগুলিকে সাধারণ চরিত্র হিসেবে ব্যবহার করতে।|: OR অপারেটর, একাধিক প্যাটার্নের মধ্যে মিল।+,?,{}: Extended Regular Expressions (ERE) এর অংশ, যেগুলি আরও জটিল প্যাটার্ন matching করতে সহায়তা করে।
Sed এবং Regular Expressions-এ এই বিশেষ চরিত্রগুলির মাধ্যমে আপনি সহজেই টেক্সট ফাইলগুলির মধ্যে অনেক ধরনের পরিবর্তন এবং বিশ্লেষণ করতে পারবেন।
Anchors রেগুলার এক্সপ্রেশনে দুটি বিশেষ চিহ্ন হলো ^ এবং $। এগুলি সাধারণত লাইন মেলানোর জন্য ব্যবহৃত হয় এবং তাদের সাহায্যে আপনি লাইনটির শুরু এবং শেষ কোথায় সেটা নির্দিষ্ট করতে পারেন। এগুলি খুবই গুরুত্বপূর্ণ যখন আপনি নির্দিষ্ট অবস্থানে কোনো প্যাটার্ন খুঁজে বের করতে চান, যেমন লাইন শুরুর বা শেষের প্যাটার্ন।
Anchors: ^ এবং $
^(Caret): এটি লাইন শুরুর প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। অর্থাৎ, যদি আপনি কোনো প্যাটার্ন দিয়ে একটি লাইনের শুরুতে কিছু খুঁজে চান, তবে^ব্যবহার করা হয়।$(Dollar Sign): এটি লাইন শেষে প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। অর্থাৎ, আপনি যদি কোনো প্যাটার্ন দিয়ে একটি লাইনের শেষের কিছু খুঁজতে চান, তবে$ব্যবহার করা হয়।
^ (Caret) - Line Start Matching
^ চিহ্নটি লাইনটির শুরুতে থাকা প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। এটি আপনাকে টেক্সট ফাইলে বা স্ট্রিমে লাইনের প্রথমে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে সাহায্য করে।
উদাহরণ:
লাইন শুরুতে নির্দিষ্ট প্যাটার্ন খুঁজে বের করা:
ধরুন আপনি সেই সমস্ত লাইন খুঁজতে চান যেগুলোর শুরুতে "Hello" শব্দটি রয়েছে।কমান্ড:
sed '/^Hello/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে লাইনটি "Hello" দিয়ে শুরু হচ্ছে।লেখার প্রথমে কোনো সংখ্যা থাকা লাইন খুঁজে বের করা:
আপনি যদি সেই সমস্ত লাইন খুঁজতে চান যেগুলো সংখ্যা দিয়ে শুরু হয়:কমান্ড:
sed '/^[0-9]/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে লাইনটি সংখ্যার মাধ্যমে শুরু হচ্ছে (যেমন, "123", "456" ইত্যাদি)।
$ (Dollar Sign) - Line End Matching
$ চিহ্নটি লাইনটির শেষে থাকা প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। এটি টেক্সট ফাইলে বা স্ট্রিমে লাইনের শেষে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে সাহায্য করে।
উদাহরণ:
লাইন শেষে নির্দিষ্ট প্যাটার্ন খুঁজে বের করা:
ধরুন আপনি সেই সমস্ত লাইন খুঁজতে চান যেগুলোর শেষে "World" শব্দটি রয়েছে।কমান্ড:
sed '/World$/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে লাইনটি "World" দিয়ে শেষ হচ্ছে।লাইনের শেষে কোনো বিশেষ চিহ্নের উপস্থিতি খুঁজে বের করা:
আপনি যদি সেই সমস্ত লাইন খুঁজতে চান যেগুলোর শেষে একটি পিরিয়ড (.) চিহ্ন রয়েছে:কমান্ড:
sed '/\.$/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে লাইনটি পিরিয়ড দিয়ে শেষ হচ্ছে (যেমন, "Hello." অথবা "Goodbye.")।
^ এবং $ একসাথে ব্যবহার করা
^ এবং $ চিহ্ন একসাথে ব্যবহার করে আপনি সম্পূর্ণ লাইনটি মেলাতে পারেন, অর্থাৎ আপনি পুরো লাইনের শুরু থেকে শেষ পর্যন্ত একটি নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে পারেন।
উদাহরণ:
পুরো লাইন "Hello World" মেলানো:
আপনি যদি পুরো লাইনটি "Hello World" হতে চান, তাহলে এই কমান্ড ব্যবহার করতে পারেন:কমান্ড:
sed '/^Hello World$/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে পুরো লাইনটি "Hello World"।লাইনের পুরো টেক্সট শুধুমাত্র একটি নির্দিষ্ট শব্দের সাথে মিলিয়ে দেখার জন্য:
যদি আপনি নিশ্চিত করতে চান যে একটি লাইন কেবলমাত্র "Apple" শব্দটি নিয়ে তৈরি হয়েছে (যতটুকু কিছু আর নেই):কমান্ড:
sed '/^Apple$/p' file.txtএটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেখানে পুরো লাইনটি শুধুমাত্র "Apple" শব্দটি নিয়ে রয়েছে।
^ এবং $ এর অন্যান্য ব্যবহার
^এবং$রেগুলার এক্সপ্রেশন ব্যবহার করা হয় যখন আপনি শুধুমাত্র লাইন শুরু বা শেষের প্যাটার্নের সাথে কাজ করতে চান। এগুলো টেক্সট বা ফাইল ম্যানিপুলেশনকে আরও নির্দিষ্ট এবং কার্যকর করে তোলে।- লিনিয়ার মেলানোর জন্য এই চিহ্নগুলি সবচেয়ে কার্যকরী, বিশেষ করে যখন আপনার কেবল লাইন শুরু বা শেষের প্যাটার্ন খুঁজতে হয়।
সারাংশ
^(Caret): এটি লাইনটির শুরুর প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। আপনি এটি ব্যবহার করে নিশ্চিত করতে পারেন যে প্যাটার্নটি একটি লাইনের প্রথম অংশে উপস্থিত রয়েছে।$(Dollar Sign): এটি লাইনটির শেষের প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। এটি নিশ্চিত করতে সাহায্য করে যে প্যাটার্নটি একটি লাইনের শেষের অংশে রয়েছে।
এই দুটি অঙ্গরোধ আপনাকে লাইনটির নির্দিষ্ট অংশে প্যাটার্ন খুঁজে বের করতে সক্ষম করে, যা টেক্সট ফাইল এবং স্ট্রিমে টেক্সট ম্যানিপুলেশন সহজ এবং নির্দিষ্ট করে তোলে।
Sed (Stream Editor) এর মাধ্যমে আপনি complex patterns এবং তাদের matching techniques ব্যবহার করে অত্যন্ত শক্তিশালী টেক্সট ম্যানিপুলেশন করতে পারেন। Sed রেগুলার এক্সপ্রেশন (regular expressions বা regex) সমর্থন করে, যা আপনাকে খুবই জটিল প্যাটার্নের জন্য খোঁজ এবং প্রতিস্থাপন করতে সাহায্য করে। এর মাধ্যমে আপনি টেক্সটের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে এবং পরিবর্তন করতে পারেন, এমনকি যখন সেই প্যাটার্নগুলি অত্যন্ত জটিল বা ভিন্ন রূপে উপস্থিত থাকে।
Sed এবং Complex Patterns
Sed এর মাধ্যমে complex patterns খুঁজতে আপনি regular expressions ব্যবহার করতে পারেন। রেগুলার এক্সপ্রেশনগুলো একটি শক্তিশালী ভাষা, যা টেক্সটের বিশেষ অংশ চিহ্নিত করতে এবং পরিচালনা করতে ব্যবহৃত হয়। Sed এ এটি প্রায়ই search, replace, insert, delete অপারেশনগুলির জন্য ব্যবহৃত হয়।
Complex Patterns এর Matching Techniques
ব্র্যাকেট ব্যবহার করা (Character Classes)
Character classes আপনাকে একাধিক অক্ষরের মধ্যে মিল খুঁজতে সাহায্য করে। এগুলো সাধারণত
[]এর মধ্যে লেখা হয়।- [a-z]: ছোট হাতের অক্ষর (a থেকে z)
- [A-Z]: বড় হাতের অক্ষর (A থেকে Z)
- [0-9]: ডিজিট (0 থেকে 9)
- [^abc]: যে কোনো কিছু except "a", "b", বা "c"
উদাহরণ:
sed '/[a-z]/p' file.txtএটি
file.txtফাইলের সব লাইন প্রদর্শন করবে যেখানে কোনো ছোট হাতের অক্ষর আছে।নির্দিষ্ট সংখ্যা ব্যবহার (Repetitions)
Sed এর মাধ্যমে আপনি repetition বা পুনরাবৃত্তির জন্য কিছু বিশেষ চিহ্ন ব্যবহার করতে পারেন।
- {n}: একটি প্যাটার্নকে n বার পুনরাবৃত্তি করা।
- {n,m}: একটি প্যাটার্নকে n থেকে m বার পুনরাবৃত্তি করা।
- {,m}: একটি প্যাটার্নকে m বার বা তার কম পুনরাবৃত্তি করা।
উদাহরণ:
sed 's/[0-9]\{3\}/XYZ/' file.txtএটি
file.txtফাইলের যেকোনো ৩ ডিজিট সংখ্যাকে "XYZ" দিয়ে প্রতিস্থাপন করবে।প্লাস এবং অ্যাস্টারিস্ক (Quantifiers)
আপনি + এবং * ব্যবহার করে আরও জটিল প্যাটার্ন তৈরি করতে পারেন।
- +: এক বা একাধিক পুনরাবৃত্তি।
- *: শূন্য বা একাধিক পুনরাবৃত্তি।
উদাহরণ:
sed 's/a\+/X/' file.txtএটি
file.txtফাইলে পরপর যেকোনো "a" গুলোকে "X"-এ প্রতিস্থাপন করবে।বিকল্প বা OR অপারেটর (Alternation)
|(অথবা) অপারেটর দিয়ে আপনি একাধিক প্যাটার্নের মধ্যে বিকল্প তৈরি করতে পারেন।উদাহরণ:
sed 's/cat\|dog/animal/' file.txtএটি
file.txtফাইলে "cat" অথবা "dog" যেকোনো শব্দকে "animal" দিয়ে প্রতিস্থাপন করবে।গ্রুপিং (Grouping)
Sed এ আপনি প্যাটার্নের গ্রুপিং করতে পারেন যাতে একাধিক অংশকে একসঙ্গে ম্যাচ করতে পারেন। এটি সাধারণত
()দিয়ে করা হয়।উদাহরণ:
sed 's/\(cat\) \(dog\)/\2 \1/' file.txtএটি
file.txtফাইলে "cat dog" কে "dog cat"-এ পরিবর্তন করবে।ব্যাকরেফারেন্স (Backreferences)
যখন আপনি প্যাটার্ন গ্রুপিং ব্যবহার করেন, তখন আপনি সেই গ্রুপের অংশগুলিকে backreference হিসেবে ব্যবহার করতে পারেন।
- \1, \2, ... : প্যাটার্ন গ্রুপের প্রথম, দ্বিতীয়, ইত্যাদি অংশের রেফারেন্স।
উদাহরণ:
sed 's/\(cat\) \(dog\)/\2 \1/' file.txtএখানে
\(cat\)এবং\(dog\)দুটি গ্রুপ হিসেবে কাজ করে এবং \2 এবং \1 ব্যাকরেফারেন্স ব্যবহার করা হয়।আগ্রহী সীমা (Anchors)
Sed এ আপনি ^ (স্টার্ট) এবং $ (এন্ড) ব্যবহার করে প্যাটার্নের শুরুর বা শেষের দিকে ম্যাচিং করতে পারেন।
- ^: লাইনের শুরু
- $: লাইনের শেষ
উদাহরণ:
sed '/^apple/s/apple/fruit/' file.txtএটি
file.txtফাইলে এমন লাইনগুলোর মধ্যে "apple"-কে "fruit"-এ প্রতিস্থাপন করবে যা "apple" দিয়ে শুরু হয়।ব্যাকট্র্যাকিং (Lookahead/Lookbehind)
Sed এর মাধ্যমে আপনি lookahead এবং lookbehind (যা প্রথাগতভাবে "positive" বা "negative" হতে পারে) দিয়ে জটিল প্যাটার্ন ম্যাচ করতে পারেন। তবে, এই ফিচারটি Sed এ সরাসরি উপলব্ধ নয়, এবং Perl-Compatible Regular Expressions (PCRE) ব্যবহার করতে হয় যেগুলো
perlবাgrep -Pএ পাওয়া যায়। Sed নিজে এই ধরনের ফিচার সমর্থন করে না।
Complex Patterns এর Sed Example
Example 1: একাধিক শব্দের মধ্যে Match
ফাইলের মধ্যে এমন লাইন খুঁজুন যেখানে "apple" এবং "banana" দুটো শব্দ একসাথে আছে এবং তাদের প্রতিস্থাপন করুন:
sed 's/apple.*banana/fruit salad/' file.txtএটি "apple" থেকে "banana" পর্যন্ত সব কিছু "fruit salad"-এ প্রতিস্থাপন করবে।
Example 2: ভিন্ন কেসে Match
যেকোনো কেসে "cat" শব্দের পরিবর্তে "animal" লিখুন:
sed 's/cat/animal/I' file.txtExample 3: কেস ইনসেনসিটিভ Replacement
"apple", "Apple", "APPLE" ইত্যাদি যেকোনো কেসে "fruit" দিয়ে প্রতিস্থাপন:
sed 's/apple/fruit/I' file.txtসারাংশ
Sed এ complex patterns এবং matching techniques ব্যবহার করে আপনি খুবই শক্তিশালী টেক্সট পরিবর্তন করতে পারেন। Regular expressions এর মাধ্যমে আপনি প্যাটার্ন matching এবং replacement এর জন্য সহজেই advanced text manipulation করতে পারেন। Sed এর regex সাপোর্টিং ক্ষমতা আপনাকে বড়, ছোট, সংখ্যা, বিশেষ ক্যারেক্টার এবং আরও অনেক কিছু সনাক্ত করে তাদের সাথে জটিল পরিবর্তন করতে সাহায্য করে।
Read more