Sed (Stream Editor) এবং অন্যান্য টুল যেমন awk, grep, এবং Perl ইত্যাদি ব্যবহার করে Advanced Text Processing (অ্যাডভান্সড টেক্সট প্রসেসিং) অনেক শক্তিশালী এবং জটিল টেক্সট ম্যানিপুলেশন কাজ করতে পারে। এগুলির মাধ্যমে আপনি প্যাটার্ন মেলানো, টেক্সট ফরম্যাটিং, ডেটা বিশ্লেষণ এবং ফাইল পরিবর্তন করতে পারেন, যা খুবই কার্যকরী যখন আপনি বিশাল ডেটা সেট বা লোগ ফাইল প্রক্রিয়া করছেন।
এখানে আমরা Sed এর মাধ্যমে অ্যাডভান্সড টেক্সট প্রসেসিং-এর কিছু গুরুত্বপূর্ণ কৌশল এবং কৌশল দেখব, যেমন রেগুলার এক্সপ্রেশন ব্যবহার, শর্তাধীন পরিবর্তন, ডেটা ফিল্টারিং, টেক্সট ম্যানিপুলেশন এবং আরও অনেক কিছু।
1. Advanced Pattern Matching (অ্যাডভান্সড প্যাটার্ন ম্যাচিং)
Sed এর মাধ্যমে আপনি আরও জটিল এবং পুঙ্খানুপুঙ্খ প্যাটার্ন ম্যাচিং করতে পারেন, যা আপনাকে ফাইলের মধ্যে নির্দিষ্ট তথ্য খুঁজে বের করতে এবং পরিবর্তন করতে সহায়তা করে। এটি রেগুলার এক্সপ্রেশন ব্যবহার করে, যা আপনি সহজে আরও শক্তিশালী টেক্সট অনুসন্ধান করতে ব্যবহার করতে পারেন।
নমুনা:
শব্দের মধ্যে এক বা একাধিক সংখ্যার অনুসন্ধান:
sed -n '/[0-9]/p' file.txtএই কমান্ডটি
file.txtফাইলের সমস্ত লাইন প্রদর্শন করবে যেগুলোর মধ্যে অন্তত একটি সংখ্যা রয়েছে।বৃহৎ বা ছোট হাতের অক্ষর (case-insensitive):
sed -n '/[a-zA-Z]/Ip' file.txtএটি সমস্ত লাইন প্রদর্শন করবে যা এক বা একাধিক অক্ষর ধারণ করে, এবং এটি কেস সেনসিটিভ নয়।
2. Conditional Substitution (শর্তাধীন প্রতিস্থাপন)
Sed তে আপনি শর্ত অনুযায়ী কিছু পরিবর্তন করতে পারেন, যেমন যদি কোনো প্যাটার্ন মেলে তাহলে কেবল সেই লাইনটি পরিবর্তন করবেন। এটি branching এবং t (test) কমান্ড ব্যবহার করে করা হয়।
নমুনা:
আপনি যদি একটি নির্দিষ্ট প্যাটার্ন খুঁজে সেটি পরিবর্তন করতে চান এবং পরিবর্তন হলে আর কোনো কাজ না করতে চান:
sed '/cat/ {s/cat/dog/; t end}' file.txtব্যাখ্যা: যদি কোনো লাইন "cat" শব্দ ধারণ করে, তাহলে সেই লাইনটি "dog"-এ পরিবর্তন করা হবে এবং পরে আর কোনো পরিবর্তন হবে না।
3. Multi-line Processing (একাধিক লাইনের প্রক্রিয়াকরণ)
Sed প্রাথমিকভাবে এক লাইনে কাজ করে, তবে আপনি hold space এবং pattern space ব্যবহার করে একাধিক লাইনের উপর কাজ করতে পারেন। এর মাধ্যমে আপনি টেক্সট বা ডেটার মধ্যে একাধিক লাইন ম্যানিপুলেশন করতে পারবেন।
নমুনা:
একাধিক লাইনের উপর কাজ করতে Sed এর মধ্যে hold space ব্যবহার করুন। যেমন, আপনি যদি দুটি লাইনে একটি নির্দিষ্ট প্যাটার্ন খুঁজে সেটি এক লাইনে একত্রিত করতে চান:
sed 'N; s/\(.*\)\n\(.*\)/\1 \2/' file.txtব্যাখ্যা:
N: পরবর্তী লাইনটি pattern space এ যুক্ত করবে।s/\(.*\)\n\(.*\)/\1 \2/: এটি দুইটি লাইনে থাকা টেক্সট একসাথে এক লাইনে সংযুক্ত করবে।
4. Text Formatting and Re-arranging (টেক্সট ফরম্যাটিং এবং পুনর্বিন্যাস)
Sed ব্যবহার করে আপনি টেক্সট ফরম্যাটিং এবং পুনর্বিন্যাস করতে পারেন, যেমন একটি টেবিলের ডেটা পরিবর্তন বা নির্দিষ্ট কলাম এক্সট্রাক্ট করা।
নমুনা:
কর্মগুলির মধ্যে একটি নির্দিষ্ট অক্ষরের ভিত্তিতে পুনর্বিন্যাস:
sed 's/\(.*\),\(.*\)/\2, \1/' file.txtএটি কমা দিয়ে বিভক্ত একটি টেবিলের কলামগুলি পরিবর্তন করবে (যেমন নাম এবং বয়সের অর্ডার পরিবর্তন করা)।
টেক্সটকে নতুন লাইনে বিভক্ত করা:
sed 's/ /\'$'\n/g' file.txtএটি
file.txtফাইলের সমস্ত স্পেসকে নতুন লাইনে পরিবর্তন করবে।
5. Looping with b and :label (লুপিং)
Sed এর লুপের মাধ্যমে আপনি প্যাটার্ন মেলানো বা টেক্সট পরিবর্তন প্রক্রিয়াকে পুনরাবৃত্তি করতে পারেন। যেমন, আপনি একটি লুপ ব্যবহার করে টেক্সটের মধ্যে একাধিক পুনরাবৃত্তি পরিবর্তন করতে পারেন যতক্ষণ না কোনো পরিবর্তন না হয়।
নমুনা:
sed ':start; s/cat/dog/; t start' file.txtব্যাখ্যা:
:startলেবেল দিয়ে লুপ শুরু হবে।s/cat/dog/: "cat" শব্দটি "dog"-এ পরিবর্তন করবে।t start: যদি পরিবর্তন হয়, তবে লেবেল:startএ ফিরে যাবে এবং পুনরাবৃত্তি করবে।- এই লুপটি তখনই থামবে যখন কোনো পরিবর্তন না হবে (অর্থাৎ "cat" আর পাওয়া যাবে না)।
6. Deleting Specific Lines (নির্দিষ্ট লাইন মুছে ফেলা)
Sed এর মাধ্যমে আপনি ফাইলে নির্দিষ্ট লাইনের মধ্যে কিছু ডেটা মুছে ফেলতে পারেন, যেমন একটি নির্দিষ্ট প্যাটার্নের ভিত্তিতে লাইন মুছে ফেলা।
নমুনা:
নির্দিষ্ট প্যাটার্নের লাইন মুছে ফেলা:
sed '/error/d' file.txtএটি
file.txtথেকে "error" শব্দযুক্ত সমস্ত লাইন মুছে ফেলবে।নির্দিষ্ট লাইন রেঞ্জ মুছে ফেলা:
sed '2,5d' file.txtএটি
file.txtফাইলে দ্বিতীয় থেকে পঞ্চম লাইন মুছে ফেলবে।
7. Extracting Columns (কলাম এক্সট্রাক্ট করা)
Sed ব্যবহার করে আপনি একটি নির্দিষ্ট ফাইল বা ডেটাসেট থেকে নির্দিষ্ট কলামগুলি এক্সট্রাক্ট করতে পারেন, যা টেবিলের ডেটা বিশ্লেষণ বা বিশাল ডেটাসেট প্রক্রিয়াকরণে খুবই কাজে আসে।
নমুনা:
স্পেস দ্বারা বিভক্ত কলাম এক্সট্রাক্ট করা:
sed 's/\(.*\) \(.*\)/\1/' file.txtএটি file.txt ফাইলের প্রথম কলাম (স্পেস দ্বারা বিভক্ত) এক্সট্রাক্ট করবে।
কমা দ্বারা বিভক্ত CSV ফাইল থেকে কলাম এক্সট্রাক্ট করা:
sed 's/\([^,]*\),.*/\1/' file.csvএটি file.csv ফাইলের প্রথম কলামটি বের করবে।
সারাংশ
Advanced Text Processing (অ্যাডভান্সড টেক্সট প্রসেসিং) একটি শক্তিশালী প্রক্রিয়া যা Sed এর মাধ্যমে বিভিন্ন জটিল টেক্সট ম্যানিপুলেশন কাজ করতে সক্ষম করে। আপনি pattern matching, conditional substitution, multi-line processing, text formatting, looping, এবং column extraction সহ আরও অনেক কিছু Sed ব্যবহার করে করতে পারেন। এই বৈশিষ্ট্যগুলির মাধ্যমে আপনি বড় এবং জটিল ডেটাসেট পরিচালনা করতে পারেন এবং অনেক ধরনের টেক্সট প্রক্রিয়াকরণ কার্য সম্পাদন করতে পারেন।
Sed (Stream Editor) ব্যবহার করে একাধিক ফাইলের উপর অপারেশন করা খুবই সহজ এবং কার্যকরী। আপনি একাধিক ফাইলে একই পরিবর্তন বা কমান্ড প্রয়োগ করতে পারেন, এবং আপনি ফাইলগুলোর মধ্যে প্যাটার্ন খুঁজে বা পরিবর্তন করতে Sed ব্যবহার করতে পারেন।
Sed দিয়ে Multiple Files এর উপর অপারেশন করা
Sed এর মাধ্যমে একাধিক ফাইলে অপারেশন করতে কিছু পদ্ধতি রয়েছে। সেগুলোর মধ্যে আছে:
- একাধিক ফাইলের উপর একই কমান্ড প্রয়োগ করা
- একাধিক ফাইলের উপর ইনপুট এবং আউটপুট পরিচালনা করা
- বিন্যাসে বা প্যাটার্নে পরিবর্তন করা
1. একাধিক ফাইলের উপর একই কমান্ড প্রয়োগ করা
Sed দিয়ে আপনি একাধিক ফাইলে একই কমান্ড প্রয়োগ করতে পারেন। এর জন্য -e অপশন বা multiple files একসাথে প্রদান করা যায়।
সিনট্যাক্স:
sed 's/old_word/new_word/g' file1.txt file2.txt file3.txtএখানে:
s/old_word/new_word/g: এটি "old_word" কে "new_word" দিয়ে প্রতিস্থাপন করবে।file1.txt file2.txt file3.txt: এটি তিনটি ফাইলে একই কমান্ড প্রয়োগ করবে।
উদাহরণ:
আপনি যদি তিনটি ফাইলের মধ্যে "apple" শব্দকে "orange"-এ প্রতিস্থাপন করতে চান:
sed 's/apple/orange/g' file1.txt file2.txt file3.txtএটি file1.txt, file2.txt, এবং file3.txt এ "apple" শব্দকে "orange"-এ প্রতিস্থাপন করবে এবং আউটপুট দেখাবে।
2. একাধিক ফাইলের উপর ইনপুট এবং আউটপুট পরিচালনা করা
Sed দিয়ে আপনি একাধিক ফাইলের উপর অপারেশন করতে এবং সেই পরিবর্তনগুলিকে আলাদা আউটপুট ফাইলে সংরক্ষণ করতে পারেন।
সিনট্যাক্স:
sed 's/old_word/new_word/g' file1.txt file2.txt > output.txtএখানে:
file1.txt file2.txt: আপনি যেসব ফাইলে কাজ করতে চান।> output.txt: আউটপুট ফাইল হিসেবেoutput.txtনির্দিষ্ট করা হয়েছে, যেখানে পরিবর্তিত ডেটা লেখা হবে।
উদাহরণ:
আপনি যদি দুইটি ফাইলে "cat" শব্দকে "dog"-এ প্রতিস্থাপন করতে চান এবং সেই পরিবর্তিত ডেটা একটি নতুন ফাইলে সেভ করতে চান:
sed 's/cat/dog/g' file1.txt file2.txt > output.txtএটি file1.txt এবং file2.txt থেকে "cat" শব্দকে "dog"-এ প্রতিস্থাপন করবে এবং ফলস্বরূপ output.txt ফাইলে সেভ হবে।
3. একাধিক ফাইলে ইনপ্লেস (In-place) পরিবর্তন করা
যদি আপনি একাধিক ফাইলে সরাসরি পরিবর্তন করতে চান, তবে -i (in-place) অপশন ব্যবহার করতে পারেন। এটি ফাইলের মধ্যে পরিবর্তন করবে এবং নতুন ফাইল তৈরি হবে না।
সিনট্যাক্স:
sed -i 's/old_word/new_word/g' file1.txt file2.txtএখানে:
-i: এটি ইনপ্লেস (in-place) পরিবর্তন করবে।file1.txt file2.txt: একাধিক ফাইলের উপর একই পরিবর্তন প্রয়োগ করবে।
উদাহরণ:
আপনি যদি দুইটি ফাইলে সরাসরি "apple" শব্দকে "orange"-এ প্রতিস্থাপন করতে চান:
sed -i 's/apple/orange/g' file1.txt file2.txtএটি file1.txt এবং file2.txt ফাইলে সরাসরি "apple" শব্দকে "orange"-এ প্রতিস্থাপন করবে।
4. একাধিক ফাইলের উপর প্যাটার্ন মেলানো
Sed দিয়ে আপনি একাধিক ফাইলে নির্দিষ্ট প্যাটার্ন মেলানো লাইনগুলো প্রদর্শন করতে পারেন। উদাহরণস্বরূপ, যদি আপনি একটি নির্দিষ্ট প্যাটার্ন বা শব্দ খুঁজে বের করতে চান, তবে সেই প্যাটার্নের সাথে মেলা সমস্ত লাইন প্রদর্শন করতে পারেন।
সিনট্যাক্স:
sed -n '/pattern/p' file1.txt file2.txtএখানে:
/pattern/p: এটি "pattern" প্যাটার্নের সাথে মেলানো লাইনগুলো প্রদর্শন করবে।file1.txt file2.txt: একাধিক ফাইলের মধ্যে প্যাটার্ন খুঁজে বের করবে।
উদাহরণ:
ধরা যাক, আপনি file1.txt এবং file2.txt ফাইল থেকে "dog" শব্দের সাথে মেলা লাইনগুলো দেখতে চান:
sed -n '/dog/p' file1.txt file2.txtএটি file1.txt এবং file2.txt ফাইল থেকে "dog" শব্দের সাথে মেলা সব লাইনগুলো আউটপুটে প্রদর্শন করবে।
5. বাচক ফাইলের উপর পরিবর্তন এবং আউটপুট রাখা
আপনি একটি স্ক্রিপ্ট ব্যবহার করে একাধিক ফাইলে পরিবর্তন করতে পারেন। এভাবে, আপনি একাধিক ফাইলে একটি নির্দিষ্ট প্যাটার্নের উপর পরিবর্তন করে সেই পরিবর্তিত ডেটা একটি আউটপুট ফাইলে রাখতে পারেন।
সিনট্যাক্স:
sed -f script.sed file1.txt file2.txt > output.txtএখানে:
-f script.sed: এটি একটি Sed স্ক্রিপ্ট ফাইল যেটি কমান্ডগুলো সংরক্ষণ করে।file1.txt file2.txt: একাধিক ফাইলের উপর অপারেশন।> output.txt: আউটপুট ফাইল হিসেবে **output.txt**।
উদাহরণ:
যদি আপনি script.sed স্ক্রিপ্ট ব্যবহার করেন এবং file1.txt এবং file2.txt ফাইলে একই পরিবর্তন করতে চান:
sed -f script.sed file1.txt file2.txt > output.txtএটি file1.txt এবং file2.txt ফাইল থেকে কমান্ডের আউটপুট হিসেবে output.txt তৈরি করবে।
Conclusion
- Sed দিয়ে আপনি একাধিক ফাইলে একই কমান্ড প্রয়োগ করতে পারেন।
-iঅপশন দিয়ে ইনপ্লেস পরিবর্তন করা যায়, এবং-eবা-fঅপশন ব্যবহার করে একাধিক ফাইলের উপর বিভিন্ন কমান্ড প্রয়োগ করা যায়।- আপনি একাধিক ফাইলে প্যাটার্ন খুঁজে, রিপ্লেসমেন্ট, ডিলিট বা অন্য কোনো পরিবর্তন করতে পারেন এবং ফলস্বরূপ আউটপুট তৈরি করতে পারেন।
এটি স্ক্রিপ্টিং এবং ফাইল ম্যানিপুলেশন প্রক্রিয়াকে আরো কার্যকরী এবং দ্রুততর করে তোলে।
Sed (Stream Editor) ব্যবহার করে Search and Replace এর জন্য Complex Patterns (জটিল প্যাটার্ন) তৈরি করা সম্ভব। রেগুলার এক্সপ্রেশন (Regular Expressions) ব্যবহার করে আপনি যেকোনো ধরনের টেক্সট বা প্যাটার্ন খুঁজে বের করতে এবং সেগুলোর সাথে মিল পাওয়া হলে প্রতিস্থাপন করতে পারেন। Sed এ Search and Replace এর জন্য Complex Patterns তৈরি করতে আপনাকে Advanced Regular Expressions ব্যবহার করতে হয়।
এখানে Complex Patterns এর কিছু উদাহরণ এবং তার ব্যবহার নিয়ে আলোচনা করা হলো।
Sed এ Complex Patterns এর জন্য রেগুলার এক্সপ্রেশন
1. Dot (.) এবং Asterisk (*) ব্যবহার
.(Dot) কোনো একটি একক চরিত্রের সাথে মেলে।*(Asterisk) পূর্ববর্তী চরিত্রের শূন্য বা তার বেশি পুনরাবৃত্তি মিলায়।
Example: যদি আপনি "c" এবং "t" এর মাঝে যেকোনো একক চরিত্রের সাথে মেলে এমন শব্দটি প্রতিস্থাপন করতে চান:
sed 's/c.t/dog/g' file.txtএটি:
- "cat", "cot", "cut" ইত্যাদি শব্দকে "dog"-এ প্রতিস্থাপন করবে।
2. ^ (Caret) এবং $ (Dollar) ব্যবহার
^: এটি লাইনের শুরুতে প্যাটার্ন মিলাতে ব্যবহৃত হয়।$: এটি লাইনের শেষে প্যাটার্ন মিলাতে ব্যবহৃত হয়।
Example: আপনি যদি এমন শব্দ প্রতিস্থাপন করতে চান যা একটি লাইন শুরু বা শেষ হয়:
- শুরুতে "cat" এবং শেষে "dog":
sed 's/^cat/dog/' file.txt- লাইনের শেষে "cat" দিয়ে "dog" প্রতিস্থাপন:
sed 's/cat$/dog/' file.txt3. Character Classes (চরিত্র শ্রেণী) ব্যবহার
[aeiou]: যেকোনো স্বরবর্ণ (vowel) খুঁজে।[^a-z]: ছোট হাতের অক্ষর বাদে অন্য সব কিছু খুঁজে।
Example: যদি আপনি সমস্ত সংখ্যাকে "NUMBER" দিয়ে প্রতিস্থাপন করতে চান:
sed 's/[0-9]\+/NUMBER/g' file.txtএটি:
- সব সংখ্যা (যতগুলো একাধিক সংখ্যা পরপর আছে) "NUMBER"-এ প্রতিস্থাপন করবে।
Example: যদি আপনি শুধু ছোট হাতের অক্ষরের মধ্যে একটি "a" এর সাথে মিল খুঁজে প্রতিস্থাপন করতে চান:
sed 's/[a-z]*a[a-z]*/replacement/g' file.txtএটি:
- যেকোনো শব্দের মধ্যে "a" শব্দটি খুঁজে এবং সেটি "replacement"-এ প্রতিস্থাপন করবে।
4. Grouping এবং Backreferences (গ্রুপিং এবং ব্যাকরেফারেন্স)
Sed এ grouping এবং backreferences ব্যবহার করে আপনি capturing groups তৈরি করতে পারেন এবং পরে সেগুলি প্রতিস্থাপন করতে পারেন।
\( ... \): এটি গ্রুপিং করতে ব্যবহৃত হয়।\1,\2, ...: ব্যাকরেফারেন্স, যা গ্রুপে পাওয়া প্যাটার্নের পুনঃব্যবহার।
Example: যদি আপনি এমন প্যাটার্ন খুঁজে বের করতে চান যা দুটি সংখ্যা এর মাঝে একটি হাইফেন (dash) থাকে এবং তারপর সেই প্যাটার্নের সাথে প্রতিস্থাপন করতে চান:
sed 's/\([0-9]\{2\}\)-\([0-9]\{2\}\)/\2-\1/g' file.txtএটি:
- ২টি সংখ্যার মধ্যে থাকা হাইফেনযুক্ত প্যাটার্নটি পরিবর্তন করে, যেমন "12-34" কে "34-12"-এ পরিবর্তন করবে।
5. \b (Word Boundaries) ব্যবহার
\b: এটি শব্দের সীমানায় মিল খুঁজে।
Example: যদি আপনি এমন শব্দ খুঁজে বের করতে চান যা "cat" দিয়ে শুরু এবং কোনো শব্দের শেষে থাকে, তাহলে:
sed 's/\bcat\b/dog/g' file.txtএটি:
- "cat" শব্দটি শুধুমাত্র যেখানে আলাদা শব্দ হিসেবে ব্যবহৃত হয়েছে, সেখানে "dog"-এ প্রতিস্থাপন করবে।
6. OR (|) ব্যবহার
Sed এ OR অপারেটর | ব্যবহৃত হয় যখন আপনি দুটি বা তার বেশি প্যাটার্নের মধ্যে মেলানো চান।
Example: যদি আপনি "cat" অথবা "dog" শব্দের মধ্যে যেকোনো একটির সাথে মেলে এমন লাইনগুলো পরিবর্তন করতে চান:
sed 's/cat\|dog/animal/g' file.txtএটি:
- "cat" অথবা "dog" এর যে কোনো একটি শব্দ "animal"-এ প্রতিস্থাপন করবে।
7. Matching Multiple Lines (একাধিক লাইনে মিল খুঁজে)
Sed সাধারণত একটি লাইন নিয়ে কাজ করে, তবে আপনি multiple lines এর সাথে মিল খুঁজতে N, P এবং D কমান্ড ব্যবহার করতে পারেন।
Example: যদি আপনি দুটি লাইন একসাথে যুক্ত করে কোনও নির্দিষ্ট প্যাটার্ন খুঁজে তা প্রতিস্থাপন করতে চান, তাহলে:
sed ':a;N;$!ba;s/\n/ /g' file.txtএটি সমস্ত লাইনগুলিকে একত্রিত করে এবং প্রতিটি লাইনের মধ্যে থাকা newline (\n) সরিয়ে দেয়, যাতে পুরো ফাইল একটি একক লাইন হয়ে যায় এবং তারপর আপনি প্যাটার্নের সাথে পরিবর্তন করতে পারবেন।
সারাংশ
Search and Replace এর জন্য Complex Patterns তৈরি করতে Sed এ Regular Expressions ব্যবহার করা হয়। আপনি dot (.), asterisk (*), caret (^), dollar ($), character classes, grouping, backreferences, OR (|) অপারেটর এবং word boundaries এর মতো রেগুলার এক্সপ্রেশন সরঞ্জাম ব্যবহার করে জটিল প্যাটার্ন মেচিং এবং প্রতিস্থাপন করতে পারেন। এটি আপনাকে টেক্সট ফাইলগুলির মধ্যে দ্রুত এবং কার্যকর পরিবর্তন করতে সহায়তা করে।
Sed (Stream Editor) দিয়ে line reordering এবং rearrangement করা সম্ভব, যদিও Sed মূলত একটি stream editor, যা লাইনের মধ্যে পরিবর্তন করার জন্য ডিজাইন করা হয়েছে। কিন্তু কিছু বিশেষ কমান্ড এবং কৌশল ব্যবহার করে আপনি lines এর reordering বা arrangement করতে পারেন। এখানে কিছু line reordering এবং rearrangement techniques দেওয়া হল যা Sed-এ করা যেতে পারে।
1. Line Swapping (লাইনের পরিবর্তন)
Sed দিয়ে আপনি দুটি লাইনের স্থান পরিবর্তন করতে পারেন। ধরুন, যদি আপনি প্রথম এবং দ্বিতীয় লাইনের স্থান পরিবর্তন করতে চান, তবে কিছু বিশেষ কমান্ডের মাধ্যমে এটি করা যেতে পারে।
উদাহরণ: দুটি লাইন পরিবর্তন করা
ধরা যাক, আপনি প্রথম দুটি লাইন পরস্পরের সাথে পাল্টাতে চান:
sed '1h; 2H; 1!H; $!d; g; s/\n/ /g' file.txtএটি:
1h: প্রথম লাইনের তথ্য Hold Space-এ কপি করবে।2H: দ্বিতীয় লাইনের তথ্য Hold Space-এ অ্যাপেন্ড করবে।1!H: পরবর্তী লাইনের মধ্যে প্রথম লাইনের পরিবর্তন করবে।$!d: শেষ লাইন ছাড়া বাকি সব লাইন মুছে ফেলবে।g: Hold Space থেকে তথ্য নিয়ে Pattern Space-এ রাখবে।s/\n/ /g: সমস্ত newline চরিত্রগুলোকে একসাথে যুক্ত করবে।
একাধিক লাইন বদলানোর উদাহরণ:
আপনি যদি পরপর একাধিক লাইনের স্থান পরিবর্তন করতে চান, তবে এটি একটু জটিল হতে পারে, কিন্তু আপনি কিছু স্ক্রিপ্ট তৈরি করে এটি করতে পারেন। এই প্রক্রিয়ায় আপনি h, g, এবং n কমান্ডের সহায়তা নিতে পারেন।
2. Lines Rearranging (লাইনের পুনর্বিন্যাস)
Sed-এ লাইনের পুনর্বিন্যাস করার জন্য কিছু কৌশল প্রয়োগ করা যায়। ধরুন, আপনি একটি ফাইলে যেসব লাইনে "cat" রয়েছে তাদের সমস্ত লাইন গুলি উপরের দিকে নিয়ে যেতে চান।
উদাহরণ: প্যাটার্নের সাথে মিল থাকা লাইনের স্থান পরিবর্তন করা
sed '/cat/{h;d};$!H;$!d;g' file.txtএটি:
/cat/{h;d}: যেসব লাইন "cat" শব্দের সাথে মিলবে, সেগুলোর তথ্য Hold Space-এ কপি হবে এবং তারপর মুছে ফেলা হবে।$!H: বাকি লাইনগুলোর মধ্যে যেগুলোর সাথে মিল নেই, সেগুলো Hold Space-এ যুক্ত হবে।$!d: বাকি সমস্ত লাইন মুছে ফেলবে।g: Hold Space থেকে তথ্য Pattern Space-এ নিয়ে আসবে।
এটি সমস্ত "cat"-সংক্রান্ত লাইনগুলোকে উল্লিখিত জায়গায় স্থানান্তরিত করবে।
3. Line Numbering (লাইনে নম্বর যোগ করা)
Sed দিয়ে আপনি একটি ফাইলের সব লাইনে নম্বর যোগ করতে পারেন। এই কৌশলটি পুনর্বিন্যাসের জন্য বা line reordering এর পূর্বে ব্যবহার করা যেতে পারে।
উদাহরণ: লাইনে নম্বর যোগ করা
sed = file.txt | sed 'N;s/\n/\t/'এটি:
- প্রথম কমান্ডটি
=Sed কমান্ড ব্যবহার করে লাইনের নম্বর প্রদান করবে। - দ্বিতীয় কমান্ডটি
Nপ্যাটার্নটি ব্যবহার করে নম্বর এবং লাইনটিকে একত্রে যোগ করবে এবং\nপরিবর্তন করে\t(tab) এর মধ্যে স্থাপন করবে।
4. Multiple Lines Rearranging (একাধিক লাইনের পুনর্বিন্যাস)
কখনো কখনো আপনি একাধিক লাইনের মধ্যে সুনির্দিষ্ট প্রক্রিয়া প্রয়োগ করতে চান, যেমন প্রথম তিনটি লাইনের জন্য কিছু পরিবর্তন করে তাদের পুনর্বিন্যাস করা।
উদাহরণ: প্রথম তিনটি লাইনের পুনর্বিন্যাস করা
sed '1,3{h;d};$!H;$!d;g' file.txtএটি:
1,3{h;d}: প্রথম তিনটি লাইনকে Hold Space-এ পাঠাবে এবং মুছে ফেলবে।$!H: বাকি লাইনের মধ্যে Hold Space-এ অ্যাপেন্ড হবে।$!d: বাকি সমস্ত লাইন মুছে ফেলবে।g: Hold Space থেকে তথ্য Pattern Space-এ নিয়ে আসবে।
5. Sorting (লাইনের সাজানো)
Sed নিজে সরাসরি sorting সাপোর্ট করে না, তবে sort কমান্ডের সাথে Sed ব্যবহার করে লাইনের সাজানো করা যেতে পারে।
উদাহরণ: Sort এর মাধ্যমে লাইনের সাজানো
sort file.txt | sed 's/old_pattern/new_pattern/g'এটি:
sort: ফাইলের লাইনগুলো সাজিয়ে দিবে।sed: সাজানো লাইনগুলোর মধ্যে একটি নির্দিষ্ট প্যাটার্ন খুঁজে তা পরিবর্তন করবে।
6. Reverse Line Order (লাইনের আদেশ বিপরীত করা)
Sed ব্যবহার করে একেবারে সরাসরি reverse line order করা সম্ভব নয়, তবে আপনি tac বা awk এর মাধ্যমে এবং Sed ব্যবহার করে এই কাজ করতে পারেন। উদাহরণস্বরূপ:
tac file.txt | sed 's/old_pattern/new_pattern/g'এটি:
tac: ফাইলের লাইনগুলোর আদেশ বিপরীত করবে।sed: তারপর সেই লাইনগুলোর মধ্যে একটি নির্দিষ্ট প্যাটার্ন খুঁজে তা পরিবর্তন করবে।
Conclusion
Sed দিয়ে line reordering এবং rearrangement করতে কিছু বিশেষ কৌশল ও কমান্ড ব্যবহার করা যায়। Sed এর মাধ্যমে আপনি:
- Pattern Matching ব্যবহার করে লাইনের স্থান পরিবর্তন করতে পারেন।
h,g,n, এবংpকমান্ড ব্যবহার করে line swapping বা reordering করতে পারেন।tacএবংawkএর সাহায্যে line order পরিবর্তন করতে পারেন।- একটি ফাইলে line numbering যোগ করা এবং লাইনের পুনর্বিন্যাসে সহায়তা করতে Sed ব্যবহার করা যেতে পারে।
Sed (Stream Editor) এর মাধ্যমে আপনি বিভিন্ন advanced use-cases বাস্তব জীবনের পরিস্থিতিতে ব্যবহার করতে পারেন, যেমন ফাইলের মধ্যে টেক্সট ম্যানিপুলেশন, লজিক্যাল চেইনিং, প্যাটার্ন বেসড পরিবর্তন, রিপোর্ট জেনারেশন, এবং আরও অনেক কিছু। নিচে Sed এর কিছু real-world use-cases এবং তাদের বাস্তব উদাহরণ দেওয়া হলো।
1. Log File Analysis and Processing
Use-case: Log files বিশ্লেষণ এবং ভুল বা অপ্রয়োজনীয় ইনফরমেশন ফিল্টার করা।
ধরা যাক, আপনার কাছে একটি লগ ফাইল রয়েছে যা error এবং info বার্তা ধারণ করে। আপনি শুধুমাত্র error বার্তাগুলি প্রিন্ট করতে চান এবং info বার্তা মুছে ফেলতে চান।
Command:
sed -n '/error/p' logfile.txtএখানে:
/error/p: "error" শব্দের সাথে মিল পাওয়া সমস্ত লাইন প্রিন্ট করবে।-n: শুধুমাত্র নির্বাচিত লাইনগুলো প্রিন্ট করবে, অন্য সব লাইন মুছে ফেলবে।
Real-World Example:
ধরা যাক, আপনার একটি ওয়েব সার্ভারের লগ ফাইল আছে এবং আপনি শুধুমাত্র error বার্তাগুলি বের করতে চান:
sed -n '/ERROR/p' /var/log/apache2/access.logএটি ওয়েব সার্ভারের error logs প্রদর্শন করবে।
2. Multiple File Replacement (Batch Replacement)
Use-case: একাধিক ফাইলে একই ধরনের পরিবর্তন করা (যেমন, সব ফাইলে একই প্যাটার্নের প্রতিস্থাপন)।
ধরা যাক, আপনি একাধিক ফাইলে "cat" শব্দকে "dog" দিয়ে প্রতিস্থাপন করতে চান। আপনি একটি স্ক্রিপ্ট তৈরি করে একাধিক ফাইলের মধ্যে এই পরিবর্তন করতে পারেন।
Command:
sed -i 's/cat/dog/g' *.txtএখানে:
-i: ইন-প্লেস পরিবর্তন।s/cat/dog/g: "cat" শব্দকে "dog"-এ প্রতিস্থাপন করবে।*.txt: সব.txtফাইলের মধ্যে পরিবর্তন করবে।
Real-World Example:
যদি আপনার অনেক .txt ফাইল থাকে এবং আপনি সব ফাইলে "apple" শব্দটি "orange" দিয়ে প্রতিস্থাপন করতে চান:
sed -i 's/apple/orange/g' *.txt3. Inserting/Updating Multiple Lines
Use-case: ফাইলের নির্দিষ্ট স্থানে একাধিক লাইন যোগ করা বা পরিবর্তন করা।
ধরা যাক, আপনার ফাইলে নতুন ইনফরমেশন যোগ করতে চান। Sed আপনাকে নির্দিষ্ট লাইনের পরে বা আগে নতুন লাইন যোগ করতে সাহায্য করে।
Command:
sed '3a\
This is the added line' file.txtএখানে:
3a\: তৃতীয় লাইনের পরে নতুন একটি লাইন "This is the added line" যোগ করবে।
Real-World Example:
আপনি যদি কোনো log file এর শেষে নতুন ইনফরমেশন যোগ করতে চান:
sed '$a\
End of the file log entry' file.logএটি ফাইলের শেষে "End of the file log entry" যোগ করবে।
4. Conditional Replacement Based on Line Numbers
Use-case: নির্দিষ্ট লাইনের উপর ভিত্তি করে শর্তসাপেক্ষে পরিবর্তন করা।
ধরা যাক, আপনি একটি ফাইলে প্রথম ৫ লাইন পরিবর্তন করতে চান, কিন্তু বাকী লাইন অপরিবর্তিত থাকবে।
Command:
sed '1,5s/cat/dog/g' file.txtএখানে:
1,5s/cat/dog/g: প্রথম ৫টি লাইনে "cat" শব্দটি "dog"-এ প্রতিস্থাপন করবে।
Real-World Example:
আপনি যদি একটি configuration file-এর প্রথম ১০টি লাইনে কিছু পরিবর্তন করতে চান, তবে:
sed '1,10s/localhost/remotehost/g' config.txtএটি config.txt ফাইলের প্রথম ১০ লাইনে "localhost" শব্দটিকে "remotehost"-এ প্রতিস্থাপন করবে।
5. Complex Text Processing Using Multiple Sed Commands
Use-case: একাধিক Sed কমান্ড ব্যবহার করে জটিল টেক্সট প্রসেসিং করা, যেমন একাধিক স্টেপে একাধিক পরিবর্তন।
ধরা যাক, আপনি একটি ফাইলে:
- "cat" শব্দটি "dog" দিয়ে প্রতিস্থাপন করতে চান,
- তারপর "fish" শব্দটি "shark" দিয়ে প্রতিস্থাপন করতে চান,
- এবং শেষে দ্বিতীয় লাইনে নতুন কিছু ইনফরমেশন যোগ করতে চান।
Command:
sed -e 's/cat/dog/g' -e 's/fish/shark/g' -e '2a\New line here' file.txtএখানে:
- প্রথম দুটি
s/cat/dog/gএবংs/fish/shark/gযথাক্রমে শব্দ প্রতিস্থাপন করবে। 2a\New line hereদ্বিতীয় লাইনের পর একটি নতুন লাইন যোগ করবে।
Real-World Example:
আপনি যদি একটি log file-এ একাধিক পরিবর্তন করতে চান, যেমন:
- "error" শব্দটি "warning"-এ পরিবর্তন,
- "cat" শব্দটি "dog"-এ,
- তারপর দ্বিতীয় লাইনে একটি বিশেষ বার্তা যোগ করা।
sed -e 's/error/warning/g' -e 's/cat/dog/g' -e '2a\This is an important log message' logfile.txt6. File Header and Footer Management
Use-case: ফাইলের শিরোনাম বা পাদচরণে নির্দিষ্ট পরিবর্তন বা তথ্য যোগ করা।
ধরা যাক, আপনি একটি ফাইলের শিরোনামে একটি timestamp (সময় স্ট্যাম্প) যোগ করতে চান।
Command:
sed '1s/^/Timestamp: 2024-11-18 10:00:00\n/' file.txtএখানে:
1s/^/Timestamp: 2024-11-18 10:00:00\n/: ফাইলের প্রথম লাইনে একটি timestamp যোগ করবে।
Real-World Example:
আপনি যদি একটি log file এর শিরোনামে বা পাদচরণে কিছু নির্দিষ্ট ইনফরমেশন যেমন সময়, তারিখ, অথবা ইভেন্টের নাম যোগ করতে চান:
sed -e '1s/^/Log File - Date: 2024-11-18\n/' -e '$a\End of the log file' logfile.txtএটি প্রথমে একটি তারিখ এবং পরবর্তীতে ফাইলের শেষে "End of the log file" যোগ করবে।
7. Extracting Specific Information from Files
Use-case: নির্দিষ্ট তথ্য extract করা, যেমন email addresses, URLs, বা IP addresses।
ধরা যাক, আপনি একটি ফাইল থেকে email addresses এক্সট্র্যাক্ট করতে চান।
Command:
sed -n 's/.*\(.*@.*\)/\1/p' file.txtএখানে:
.*\(.*@.*\): এটি একটি রেগুলার এক্সপ্রেশন যা email addresses খুঁজে বের করে।\1: প্রথম প্যারেন্টেসিস গ্রুপ থেকে পাওয়া তথ্য (এখানে email) প্রিন্ট করবে।
Real-World Example:
আপনি যদি একটি ফাইল থেকে URLs এক্সট্র্যাক্ট করতে চান:
sed -n 's/.*\(http[^ ]*\)/\1/p' file.txtএটি URLs এক্সট্র্যাক্ট করবে এবং প্রদর্শন করবে।
Conclusion
Sed এর advanced use-cases বাস্তব জীবনে log file analysis, batch replacement, complex text processing, file management, এবং data extraction সহ বিভিন্ন কাজের জন্য ব্যবহৃত হতে পারে। Sed এর শক্তিশালী কমান্ড, রেগুলার এক্সপ্রেশন, এবং লজিকাল ফ্লো কন্ট্রোল ব্যবহার করে আপনি complex editing এবং text processing দ্রুত এবং দক্ষভাবে করতে পারেন।
Read more