Sed (Stream Editor) একটি শক্তিশালী টুল যা loops (লুপ) এবং branching (ব্রাঞ্চিং) এর মতো কন্ট্রোল ফ্লো কনসেপ্টও সাপোর্ট করে, যা আপনাকে আরো জটিল এবং শর্তাধীন টেক্সট প্রক্রিয়াকরণের জন্য সক্ষম করে। Sed loops এবং branching টেক্সট ফাইলের মধ্যে পুনরাবৃত্তি, শর্তভিত্তিক প্রক্রিয়া এবং লজিক্যাল কাজগুলো করতে সহায়তা করে।
Sed Loops (লুপস)
Sed তে লুপিং করার জন্য সরাসরি কোনো লুপ কনস্ট্রাক্ট যেমন for বা while নেই, তবে আপনি Sed এর মধ্যে :label এবং b label কমান্ড ব্যবহার করে একটি লুপের মতো কার্যক্রম তৈরি করতে পারেন। এই পদ্ধতিটি Sed এর branching এবং label কমান্ডের মাধ্যমে সম্ভব।
Looping with :label and b label
Sed এ লুপ কার্যকর করতে, প্রথমে একটি label তৈরি করতে হবে এবং পরে সেই লেবেলে পুনরায় ফিরে আসার জন্য b কমান্ড ব্যবহার করতে হবে। সাধারণত, এটি ব্যবহার করা হয় যখন আপনি কোনো নির্দিষ্ট শর্ত পূর্ণ না হওয়া পর্যন্ত একটি টাস্ক পুনরাবৃত্তি করতে চান।
সিনট্যাক্স:
sed ':label; command; b label' file.txtএখানে:
:label: এটি একটি লেবেল, যা লুপের শুরুতে নির্ধারিত হয়।command: এটি Sed এর একটি কমান্ড যা লুপের মধ্যে একবারে কার্যকর হবে।b label: এটি লেবেলে ফিরে যাবে, পুনরায় লুপ চালু করবে।
Example: Looping with b and :label
এখানে একটি উদাহরণ দেওয়া হলো যেখানে আপনি একটি লুপের মধ্যে লাইনগুলি প্রক্রিয়া করবেন এবং একটি শর্তপূর্ণ কাজ করবেন:
sed ':start; s/cat/dog/; t start' file.txtব্যাখ্যা:
- প্রথমে,
:startলেবেলটি সৃষ্ট করা হয়েছে। s/cat/dog/: এটি "cat" শব্দটি "dog"-এ প্রতিস্থাপন করবে।t start: যদি কোনো পরিবর্তন ঘটে, তবে এটি:startলেবেলে ফিরে যাবে এবং এই প্রক্রিয়াটি পুনরাবৃত্তি করবে।- লুপ তখনই থামবে যখন আর কোনো পরিবর্তন হবে না (অর্থাৎ, "cat" শব্দটি আর থাকবে না)।
Sed Branching (ব্রাঞ্চিং)
Branching হল Sed এর একটি কন্ট্রোল স্ট্রাকচার যা শর্তসাপেক্ষ কমান্ড চালানোর জন্য ব্যবহৃত হয়। Sed branching এর মাধ্যমে আপনি if-else লজিক, goto বা jump কার্যকর করতে পারেন।
Sed এ ব্রাঞ্চিং করার জন্য b (branch) এবং t (test) কমান্ড ব্যবহার করা হয়।
Branching Syntax (ব্রাঞ্চিং সিনট্যাক্স)
সিনট্যাক্স:
sed ':label; command1; b label2; :label2; command2' file.txtএখানে:
:label: একটি লেবেল তৈরি করা হয়।b label2: শর্ত অনুযায়ী লেবেল ২ তে চলে যেতে নির্দেশ দেওয়া হয়।t label: যদি কোনো পরিবর্তন হয়, তবে লেবেল ১ থেকে লেবেল ২ তে যেতে পারে।
Branching Example
ধরা যাক, আপনি একটি ফাইলে "cat" শব্দটি খুঁজে, এটি পরিবর্তন করলে একটি নির্দিষ্ট কাজ করতে চান, অন্যথায় একটি ভিন্ন কাজ করবেন।
sed ':start; s/cat/dog/; t change; b end; :change; s/dog/fish/; :end' file.txtব্যাখ্যা:
- প্রথমে,
:startলেবেল দিয়ে শুরু হবে। s/cat/dog/: "cat" কে "dog"-এ প্রতিস্থাপন করবে।t change: যদি কোনো পরিবর্তন ঘটে, তবে এটি:changeলেবেলে চলে যাবে, যেখানে আরও একটি প্রতিস্থাপন হবে (যেমন "dog"-কে "fish"-এ পরিবর্তন করা হবে)।b end: যদি কোনো পরিবর্তন না ঘটে, তাহলে এটি:endলেবেলে চলে যাবে।:changeএবং:endহল লেবেল, যা Sed এর ফ্লো কন্ট্রোল করতে ব্যবহৃত হবে।
Sed তে লুপ এবং ব্রাঞ্চিং এর ব্যবহার
Sed এর মধ্যে loops এবং branching এর মাধ্যমে আপনি:
- টেক্সটের মধ্যে কোনো পরিবর্তন ঘটানোর পর পুনরায় সেই পরিবর্তনটি পরীক্ষা করতে পারেন।
- শর্তের উপর ভিত্তি করে আলাদা আলাদা কাজ করতে পারেন।
- নির্দিষ্ট প্যাটার্ন অনুযায়ী টেক্সট ফাইল প্রক্রিয়া করতে পারেন।
আরেকটি উদাহরণ:
যদি আপনি file.txt ফাইলে "dog" শব্দটির পরিবর্তে "cat" রাখেন, তবে সেই লাইনটি যদি শেষ হয় তবে আর কোনো পরিবর্তন করবেন না:
sed ':loop; /dog/ {s/dog/cat/; t loop}' file.txtব্যাখ্যা:
- এটি প্রথমে "dog" শব্দ খুঁজে, সেটি "cat"-এ প্রতিস্থাপন করবে।
- তারপর,
t loopকমান্ডটি এটিকে:loopলেবেলে ফিরে যেতে বলে, যেখানে নতুন প্যাটার্ন চেক হবে।
সারাংশ
Sed Loops এবং Branching Sed এর শক্তিশালী কন্ট্রোল ফ্লো বৈশিষ্ট্য যা আপনাকে repetitive tasks (পুনরাবৃত্তিমূলক কাজ) এবং conditional processing (শর্তাধীন প্রক্রিয়াকরণ) করতে সাহায্য করে। Loops দিয়ে আপনি পুনরাবৃত্তি করতে পারেন এবং Branching এর মাধ্যমে আপনি শর্তভিত্তিক কাজ সম্পাদন করতে পারেন। এই কন্ট্রোল স্ট্রাকচারগুলি ব্যবহার করে আপনি Sed এর মাধ্যমে অনেক জটিল টেক্সট প্রক্রিয়াকরণ কাজ করতে পারবেন।
Sed (Stream Editor) এর b (branch) এবং t (test) কমান্ডগুলি conditional branching এবং looping এর জন্য ব্যবহৃত হয়। এগুলি Sed স্ক্রিপ্টে লজিক্যাল ফ্লো নিয়ন্ত্রণ করতে ব্যবহৃত হয়, যেখানে আপনি নির্দিষ্ট শর্তের ভিত্তিতে কমান্ডগুলি চালানোর জন্য শাখা তৈরি করতে পারেন।
1. b (branch) কমান্ড
Sed এ b (branch) কমান্ডটি একটি jump বা branch তৈরি করে, অর্থাৎ এটি Sed স্ক্রিপ্টে একটি নির্দিষ্ট জায়গায় চলে যেতে নির্দেশ দেয়। আপনি এটি ব্যবহার করে একটি নির্দিষ্ট লেবেলে চলে যেতে পারেন।
সিনট্যাক্স:
b labelএখানে:
label: এটি একটি লেবেল যা Sed স্ক্রিপ্টের মধ্যে সংজ্ঞায়িত করা হয়। এটিbকমান্ড দ্বারা জাম্প করার স্থানের প্রতিনিধিত্ব করে।
b কমান্ডের উদাহরণ:
sed '1b skip; 2s/cat/dog/' file.txtএটি:
1b skip: প্রথম লাইনটি পড়ার পর, Sedskipলেবেলে চলে যাবে এবং কোনো পরিবর্তন করবে না।2s/cat/dog/: দ্বিতীয় লাইনে "cat" শব্দকে "dog" দিয়ে প্রতিস্থাপন করবে।
লেবেল এবং শাখা ব্যবহারের মাধ্যমে আপনি স্ক্রিপ্টের মধ্যে যেকোনো অংশে জাম্প করতে পারেন।
অন্য উদাহরণ:
sed '3b end; 4s/hello/world/' file.txtএটি:
3b end: তৃতীয় লাইনের পরে Sedendলেবেলে চলে যাবে।4s/hello/world/: চতুর্থ লাইনে "hello" শব্দটিকে "world"-এ প্রতিস্থাপন করবে।
2. t (test) কমান্ড
t (test) কমান্ডটি একটি শর্তাধীন জাম্প বা conditional branching তৈরি করে। এটি s/// (substitution) কমান্ডের পরে ব্যবহৃত হয়, যা পরীক্ষার শর্ত হিসেবে কাজ করে। যদি s/// কমান্ডে কোনো পরিবর্তন হয় (অর্থাৎ, প্যাটার্ন ম্যাচ করে এবং সাফল্য অর্জিত হয়), তবে t কমান্ডটি নির্দিষ্ট লেবেলে চলে যাবে।
সিনট্যাক্স:
t labelএখানে:
label: একটি লেবেল যেখানে আপনিtকমান্ড দ্বারা যেতে চান, যদি পূর্ববর্তীs///কমান্ডটি সফল হয়।
t কমান্ডের উদাহরণ:
sed 's/cat/dog/; t skip; s/dog/rabbit/' file.txtএটি:
- প্রথমে
s/cat/dog/কমান্ড চালাবে এবং "cat" শব্দটি "dog" দিয়ে প্রতিস্থাপন করবে। - যদি প্রথম কমান্ডে কোনো পরিবর্তন হয় (অর্থাৎ, "cat" শব্দটি পাওয়া যায়), তাহলে
t skipকমান্ডটি চলে যাবে এবং দ্বিতীয় কমান্ডটি (যথাs/dog/rabbit/) কার্যকর হবে। - যদি প্রথম কমান্ডে কোনো পরিবর্তন না ঘটে, তখন দ্বিতীয় কমান্ড (যথা
s/dog/rabbit/) চলবে না।
অন্য উদাহরণ:
sed 's/apple/banana/; t found; s/mango/peach/' file.txtএটি:
- প্রথমে
s/apple/banana/কমান্ডে "apple" শব্দটি "banana"-এ পরিবর্তিত হবে, যদি এটি থাকে। - যদি "apple" শব্দটি থাকে এবং পরিবর্তন হয়, তাহলে
t foundলেবেলে চলে যাবে এবং দ্বিতীয় কমান্ডটি চলবে না। - যদি প্রথম কমান্ডে কোনো পরিবর্তন না ঘটে, তবে
s/mango/peach/কমান্ড কার্যকর হবে।
b এবং t কমান্ডের ব্যবহারের সুবিধা
b(branch) কমান্ডটি আপনাকে কোনো নির্দিষ্ট স্থানে জাম্প করতে সাহায্য করে, যেটি আপনি পূর্বে একটি লেবেল দিয়ে উল্লেখ করেছেন।t(test) কমান্ডটিs///কমান্ডের পরবর্তী শর্তাধীন কার্যকলাপ পরিচালনা করে, যা কেবল তখন কার্যকর হবে যদিs///কমান্ডটি সফল হয় এবং কোনো পরিবর্তন ঘটে।
এগুলি Sed স্ক্রিপ্টে লজিক্যাল ফ্লো নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয় এবং আপনার স্ক্রিপ্টে জটিল শর্তযুক্ত পরিবর্তন বা লুপিং প্রক্রিয়া যোগ করতে সাহায্য করে।
Sed (Stream Editor) ব্যবহার করে Conditional Execution (শর্তাধীন কার্য সম্পাদন) এবং Pattern Matching (প্যাটার্ন মেচিং) করা সম্ভব। Sed এ প্যাটার্ন মেচিং এবং শর্তাধীন কার্য সম্পাদন বিভিন্ন প্রক্রিয়া অনুযায়ী টেক্সট পরিবর্তন এবং আউটপুট নিয়ন্ত্রণ করতে সাহায্য করে। এগুলি মূলত শর্তসাপেক্ষভাবে নির্দিষ্ট লাইনে পরিবর্তন বা কার্য সম্পাদন করার জন্য ব্যবহৃত হয়।
Sed এ Conditional Execution (শর্তাধীন কার্য সম্পাদন)
Sed এর মধ্যে শর্তসাপেক্ষ কার্য সম্পাদন করতে হলে সাধারণত if-else টাইপের চেইনড কমান্ড বা t (test) কমান্ড ব্যবহার করা হয়। এই কমান্ডগুলির মাধ্যমে আপনি কোনো প্যাটার্ন ম্যাচ হলে একটি নির্দিষ্ট কাজ চালাতে পারেন এবং ম্যাচ না হলে অন্য একটি কাজ চালাতে পারেন।
t (test) কমান্ড
- ব্যবহার:
tকমান্ডটি একটি test কমান্ড হিসেবে কাজ করে। এটি pattern space এ কোনো পরিবর্তন হলে পরবর্তী কমান্ড চালাবে, অন্যথায় চালাবে না। সিনট্যাক্স:
sed '/pattern/ t command'এখানে:
/pattern/: যদি প্যাটার্ন মেলে।t: test কমান্ড, যা কোনো পরিবর্তন হলে পরবর্তী কমান্ড চালাবে।
উদাহরণ 1: একটি প্যাটার্ন পাওয়া গেলে অন্য প্যাটার্ন প্রতিস্থাপন
যদি "cat" শব্দটি পাওয়া যায়, তবে সেটি "dog" দিয়ে প্রতিস্থাপন করা হবে, আর যদি না পাওয়া যায়, তবে "fish" শব্দটি প্রতিস্থাপন হবে।
sed '/cat/ t; s/fish/seafood/' file.txtএটি:
/cat/ tদ্বারা "cat" যদি পাওয়া যায়, তাহলে পরবর্তী কমান্ড (প্রতিস্থাপন) চালাবে।- যদি "cat" না পাওয়া যায়, তবে "fish" শব্দটি "seafood" দিয়ে প্রতিস্থাপন করবে।
b (branch) কমান্ড
- ব্যবহার:
bকমান্ডটি ব্যবহার করে আপনি branch করতে পারেন, অর্থাৎ কোনো শর্ত পূর্ণ হলে একটি নির্দিষ্ট অংশে চলে যেতে পারেন। সিনট্যাক্স:
sed '/pattern/ b label'
উদাহরণ 2: "dog" শব্দটি পাওয়া গেলে লেবেল skip এ চলে যাওয়া
sed '/dog/ b skip; s/cat/dog/g; :skip' file.txtএটি:
- যদি "dog" পাওয়া যায়, তাহলে
b skipকমান্ডটি skip লেবেলে চলে যাবে। - অন্যথায়, "cat" শব্দটিকে "dog"-এ প্রতিস্থাপন করবে।
Sed এ Pattern Matching (প্যাটার্ন মেচিং)
Sed এ Pattern Matching মূলত Regular Expressions (রেগুলার এক্সপ্রেশন) ব্যবহার করে করা হয়। এটি টেক্সটের নির্দিষ্ট প্যাটার্ন খুঁজে বের করার প্রক্রিয়া, যা টেক্সট পরিবর্তন, মুছে ফেলা বা অন্য কোনো প্রক্রিয়া চালানোর জন্য ব্যবহৃত হয়।
Pattern Matching এর মৌলিক ব্যবহার
- Pattern Matching করতে
/pattern/স্যিনট্যাক্স ব্যবহার করা হয়।
সিনট্যাক্স:
sed '/pattern/ command' file.txtএখানে:
/pattern/: প্যাটার্ন বা রেগুলার এক্সপ্রেশন যা আপনি খুঁজতে চান।command: প্যাটার্ন মিলে গেলে যে কমান্ডটি চালাতে চান।
উদাহরণ 3: "cat" প্যাটার্ন পাওয়া গেলে লাইন প্রদর্শন
sed -n '/cat/p' file.txtএটি file.txt ফাইলের মধ্যে "cat" প্যাটার্ন মেলে এমন লাইনগুলো প্রিন্ট করবে।
উদাহরণ 4: একটি নির্দিষ্ট প্যাটার্নের সাথে শুরু হওয়া লাইন মুছে ফেলা
ধরা যাক, আপনি যদি "dog" দিয়ে শুরু হওয়া লাইনগুলো মুছে ফেলতে চান, তাহলে:
sed '/^dog/d' file.txtএটি file.txt থেকে "dog" দিয়ে শুরু হওয়া সব লাইন মুছে ফেলবে।
Advanced Pattern Matching with Regular Expressions
Sed Regular Expressions সমর্থন করে, যা আপনাকে আরও জটিল প্যাটার্ন খুঁজে বের করতে সাহায্য করে।
উদাহরণ 5: রেগুলার এক্সপ্রেশন ব্যবহার করে প্যাটার্ন মেচিং
.(Dot): এটি যেকোনো একক চরিত্রের সাথে মিলাবে।sed '/c.t/p' file.txt*(Asterisk): এটি পূর্ববর্তী চরিত্রের শূন্য বা তার বেশি পুনরাবৃত্তি মিলাবে।sed '/ca*t/p' file.txt^(Caret): এটি লাইনের শুরুতে প্যাটার্ন মিলাবে।sed '/^cat/p' file.txt$(Dollar): এটি লাইনের শেষে প্যাটার্ন মিলাবে।sed '/dog$/p' file.txt[](Square Brackets): এটি নির্দিষ্ট এক বা একাধিক চরিত্রের মধ্যে মিলাবে।sed '/[aeiou]/p' file.txt
উদাহরণ 6: OR (Alternation) ব্যবহার করে প্যাটার্ন মেচিং
যদি আপনি দুটি প্যাটার্নের মধ্যে মিল খুঁজতে চান, তবে | (OR) অপারেটর ব্যবহার করতে পারেন:
sed '/cat\|dog/p' file.txtএটি "cat" অথবা "dog" প্যাটার্নের সাথে মিলে এমন সব লাইন প্রিন্ট করবে।
Conclusion
- Conditional Execution: Sed এ
tএবংbকমান্ড ব্যবহার করে আপনি শর্ত পূর্ণ হলে নির্দিষ্ট কমান্ড বা অংশে যেতে পারেন। - Pattern Matching: Sed এ Regular Expressions ব্যবহার করে প্যাটার্ন মেচিং করা হয়, যা আপনাকে খুবই শক্তিশালী টেক্সট ম্যানিপুলেশন করার সুযোগ দেয়।
/pattern/স্যিনট্যাক্স ব্যবহার করে আপনি যেকোনো প্যাটার্ন বা শর্ত অনুসারে টেক্সট পরিবর্তন বা মুছে ফেলতে পারেন।
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 করতে পারবেন, যেমন একাধিক লাইন প্রক্রিয়া করা, লাইনগুলোর মধ্যে পরিবর্তন করা, এবং পুনরাবৃত্তি করে কাজ করা।
Sed (Stream Editor) একটি শক্তিশালী টুল যা শুধুমাত্র টেক্সট পরিবর্তন বা ম্যানিপুলেশন করতে সাহায্য করে না, বরং এর মাধ্যমে লজিকাল ফ্লো কন্ট্রোল (logical flow control) ব্যবহার করে আপনি সুনির্দিষ্ট পরিস্থিতিতে নির্দিষ্ট কাজ করতে পারেন। লজিকাল ফ্লো কন্ট্রোল ব্যবহারের মাধ্যমে আপনি if-else কন্ডিশন, লুপ এবং জাম্প স্টেটমেন্টের মতো কার্যকরী ফ্লো কন্ট্রোল ব্যবহার করতে পারেন।
Sed-এ লজিকাল ফ্লো কন্ট্রোল করার জন্য প্রধানত if-else, while, next ইত্যাদি কনসেপ্ট ব্যবহৃত হয়, যদিও Sed মূলত স্ক্রিপ্টিং ভাষা নয় এবং এর মধ্যে জটিল ফ্লো কন্ট্রোল সরাসরি পাওয়া যায় না। তবে, কিছু কমান্ড এবং টেকনিক ব্যবহার করে আপনি এসব কার্যকারিতা আংশিকভাবে অর্জন করতে পারেন।
Sed-এ লজিকাল ফ্লো কন্ট্রোলের প্রধান উপাদান
b(branch) কমান্ডt(test) কমান্ডn(next) কমান্ডp(print) কমান্ড
1. b (branch) কমান্ড: Condition-based Jump
b কমান্ডটি Sed-এ যেকোনো অবস্থায় লজিক্যাল জাম্প করার জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট লাইন বা প্যাটার্নের পরবর্তী কমান্ডকে অগ্রাহ্য করে চলে যেতে সহায়তা করে।
সিনট্যাক্স:
sed '/pattern/b label' file.txtএখানে:
/pattern/: যে প্যাটার্নটি মিললে Sed জাম্প করবে।b label: এটি যেকোনো অবস্থায় label এর দিকে চলে যাবে, যেখানে আপনি পরবর্তী কমান্ড সংরক্ষণ করেছেন।
উদাহরণ:
ধরা যাক, আপনি যদি "error" শব্দ পাওয়া গেলে কমান্ডের পরবর্তী অংশ উপেক্ষা করতে চান, তবে:
sed '/error/b skip; s/cat/dog/' file.txtএখানে:
- যদি "error" পাওয়া যায়, তাহলে
b skipএর মাধ্যমে এটি "skip" লেবেলে চলে যাবে এবং "s/cat/dog/" কমান্ডটি কার্যকর হবে না। - "skip" লেবেলে কিছু কাজ করলে, "cat" শব্দটি "dog"-এ প্রতিস্থাপন হবে।
2. t (test) কমান্ড: Test and Branching
t কমান্ডটি if-else লজিকের মতো কাজ করে। এটি একটি শর্ত পরীক্ষা করে এবং যদি পূর্ববর্তী পরিবর্তন সফল হয়, তাহলে নির্দিষ্ট লেবেলে জাম্প করে।
সিনট্যাক্স:
sed '/pattern/t label' file.txtএখানে:
/pattern/: যদি প্যাটার্ন পাওয়া যায়, তাহলে এটি শর্তের সাথে মিলবে।t label: এটিtকমান্ডটি ব্যবহার করে, পরিবর্তন সফল হলে নির্দিষ্ট লেবেলে জাম্প করবে।
উদাহরণ:
ধরা যাক, আপনি যদি "cat" শব্দটি পেলে তা "dog"-এ প্রতিস্থাপন করতে চান, এবং শেষে একটি বার্তা প্রদর্শন করতে চান:
sed '/cat/s/cat/dog/t end; s/dog/cat/' file.txt; echo "Pattern replaced!"এখানে:
/cat/s/cat/dog/: "cat" শব্দটি "dog"-এ পরিবর্তন করবে।t end: সফল পরিবর্তন হলে লেবেলend-এ চলে যাবে, এবং পরবর্তীs/dog/cat/কমান্ডটি কার্যকর হবে না।echo "Pattern replaced!": বার্তা দেখাবে যদি পরিবর্তন সফল হয়।
3. n (next) কমান্ড: Skip Current Line
n কমান্ডটি Sed-এ বর্তমান লাইনে কাজ করার পরে পরবর্তী লাইনে চলে যেতে ব্যবহৃত হয়। এটি আপনাকে টেক্সট প্রক্রিয়া করার সময় কেবলমাত্র নির্দিষ্ট কিছু লাইনকে এড়িয়ে যাওয়ার সুযোগ দেয়।
সিনট্যাক্স:
sed 'n' file.txtউদাহরণ:
sed '1n; s/cat/dog/' file.txtএটি:
- প্রথম লাইনটি এড়িয়ে যাবে এবং পরবর্তী লাইনগুলোতে "cat" শব্দটিকে "dog" দিয়ে প্রতিস্থাপন করবে।
4. p (print) কমান্ড: Print Matched Lines
p কমান্ডটি যেকোনো প্যাটার্নের সাথে মিল পাওয়া লাইনগুলো প্রিন্ট করতে ব্যবহৃত হয়। আপনি যখন ম্যানিপুলেশন বা টেক্সট চেক করতে চান, তখন এটি ব্যবহার করতে পারেন।
সিনট্যাক্স:
sed -n '/pattern/p' file.txtউদাহরণ:
sed -n '/error/p' file.txtএটি:
-nঅপশনটি ব্যবহার করে শুধুমাত্র "error" শব্দ যুক্ত লাইনগুলো প্রিন্ট করবে।
যেমন লজিকাল ফ্লো কন্ট্রোলের বাস্তব উদাহরণ
ফ্লো কন্ট্রোল উদাহরণ 1: Conditional Check and Jump
ধরা যাক, আপনি একটি ফাইলে "cat" শব্দ পাওয়া গেলে কিছু না করে, অন্য কিছু শব্দের সাথে কাজ করতে চান:
sed '/cat/b skip; s/dog/cat/; :skip' file.txtএখানে:
- যখন "cat" পাওয়া যাবে, তখন
b skipকমান্ডটি skip লেবেলে চলে যাবে এবং "dog" শব্দ পরিবর্তন হবে না। - যদি "cat" না পাওয়া যায়, তবে সাধারণভাবে "dog" শব্দের পরিবর্তে "cat" বসানো হবে।
ফ্লো কন্ট্রোল উদাহরণ 2: Using Test Command
sed '/cat/t found; s/dog/cat/; :found' file.txtএখানে:
- যদি "cat" পাওয়া যায়, তবে
t foundলেবেলে চলে যাবে এবং পরবর্তী "dog" প্রতিস্থাপন হবে না। - যদি "cat" না পাওয়া যায়, তবে "dog" শব্দটি "cat" দিয়ে পরিবর্তিত হবে।
Conclusion
Sed-এ লজিকাল ফ্লো কন্ট্রোল ব্যবহার করে আপনি টেক্সট ফাইলের মধ্যে conditional branching, looping, skipping, এবং matching করতে পারেন। b, t, n, এবং p কমান্ডগুলো ব্যবহার করে আপনি যদি নির্দিষ্ট প্যাটার্ন মেলে কিছু কার্যকরী কাজ করতে চান, তবে এই কমান্ডগুলি অত্যন্ত সহায়ক। Sed এই ধরনের ফ্লো কন্ট্রোল ব্যবহার করে complex editing এবং conditional replacement সহজেই সম্পন্ন করতে সাহায্য করে।
Read more