Pattern Space এবং Hold Space হলো Sed (Stream Editor) এর দুটি গুরুত্বপূর্ণ ধারণা, যা Sed এর কার্যক্রমকে আরও শক্তিশালী এবং নমনীয় করে তোলে। এগুলি হল দুটি আলাদা স্থান যেখানে Sed ডেটা রাখে এবং যে স্থানে পরিবর্তন বা সংরক্ষণ করা যায়। এই দুটি স্পেসের মধ্যে পার্থক্য ও তাদের ব্যবহারের ধরন বুঝে Sed কমান্ড আরও উন্নতভাবে ব্যবহার করা যায়।
1. Pattern Space
Pattern Space হল Sed এর মূল জায়গা যেখানে নির্দিষ্ট লাইন বা প্যাটার্ন সংরক্ষিত হয় এবং যেখান থেকে Sed কাজ শুরু হয়। Sed যখন একটি লাইন গ্রহণ করে (এটি যেটি পাস করা হয়), সেটি প্রথমে Pattern Space এ রাখা হয় এবং তারপর সেই লাইনটির উপরে সব কমান্ড কার্যকর হয়।
Pattern Space এর কাজ:
- Pattern Space এ বর্তমান লাইন রাখা হয়, এবং এই লাইনটি Sed এর দ্বারা পরিবর্তন বা মুছে ফেলার জন্য ব্যবহৃত হয়।
- যখন Sed একটি লাইন গ্রহণ করে, সেটি প্রথমে Pattern Space এ চলে আসে, তারপর সেখানে যা কিছু করা হয় (যেমন রিপ্লেসমেন্ট বা ডিলিট), তা এই স্পেসে করা হয়।
- সাধারণভাবে Sed এর সমস্ত কমান্ড Pattern Space তে কার্যকর হয়।
উদাহরণ:
sed 's/cat/dog/' file.txtএটি file.txt এর প্রতিটি লাইনকে Pattern Space তে নিয়ে আসবে এবং "cat" কে "dog"-এ প্রতিস্থাপন করবে।
2. Hold Space
Hold Space হলো Sed এর আরেকটি স্পেস যেখানে আপনি অতিরিক্ত ডেটা সংরক্ষণ করতে পারেন, এবং এটি Pattern Space থেকে আলাদা। Hold Space মূলত একটি অস্থায়ী মেমরি স্পেস, যেখানে আপনি কোন তথ্য সংরক্ষণ করতে পারেন এবং পরবর্তীতে সেটি Pattern Space এর সাথে তুলনা বা ব্যবহার করতে পারেন।
Hold Space এর কাজ:
- Hold Space তে Sed এর মাধ্যমে সংরক্ষিত ডেটা রাখা হয়, এবং এটি Pattern Space থেকে আলাদা থাকে।
- আপনি Pattern Space থেকে তথ্য Hold Space তে কপি বা মুভ করতে পারেন, এবং পরে সেই ডেটা আবার Pattern Space তে ফেরত আনতে পারেন।
- আপনি Hold Space এ তথ্য সংরক্ষণ করতে এবং পরবর্তীতে সেই তথ্য ব্যবহার করতে পারেন, যেমন আগের লাইন বা অন্য কিছু অস্থায়ীভাবে রাখার জন্য।
Pattern Space এবং Hold Space এর মধ্যে পার্থক্য:
- Pattern Space তে বর্তমানে কাজ করা লাইন থাকে, যখন Hold Space তে অতিরিক্ত বা অস্থায়ী তথ্য রাখা হয়।
- Pattern Space তে যে পরিবর্তনগুলি করা হয় তা সরাসরি আউটপুটে চলে আসে, কিন্তু Hold Space তে সংরক্ষিত তথ্য আউটপুটে আসে না, যতক্ষণ না আপনি সেটি Pattern Space তে ফেরত আনেন বা অন্যভাবে ব্যবহৃত না করেন।
Hold Space এ ডেটা সংরক্ষণ ও ব্যবহার:
hকমান্ড: Hold Space তে বর্তমান Pattern Space এর কপি রাখে।Hকমান্ড: Pattern Space তে বর্তমান Hold Space এর ডেটা অ্যাপেন্ড করে।gকমান্ড: Hold Space এর ডেটা Pattern Space তে ফিরিয়ে আনে।Gকমান্ড: Pattern Space এর ডেটা Hold Space তে যোগ করে।
উদাহরণ:
ধরা যাক, আপনি প্রথমে একটি লাইনকে পরিবর্তন করছেন এবং তারপর সেটি Hold Space তে সংরক্ষণ করে অন্য একটি লাইনটির সাথে যোগ করতে চান। আপনি এটি h, g কমান্ডের মাধ্যমে করতে পারেন।
sed 's/cat/dog/; h; s/fox/bird/; g' file.txtএখানে:
- প্রথমে "cat" কে "dog"-এ পরিবর্তন করা হচ্ছে।
- তারপর
hকমান্ড দ্বারা সেই পরিবর্তিত লাইন Hold Space এ সংরক্ষণ করা হচ্ছে। - এরপর
foxকেbirdএ পরিবর্তন করা হচ্ছে, এবংgকমান্ডের মাধ্যমে Hold Space থেকে সংরক্ষিত ডেটা আবার Pattern Space তে ফেরত আনা হচ্ছে।
এটি file.txt ফাইলের প্রতিটি লাইন প্রথমে "cat" থেকে "dog"-এ পরিবর্তন করবে, তারপর Hold Space তে সেই লাইনটি সংরক্ষণ করবে এবং পরবর্তীতে "fox" শব্দটিকে "bird"-এ পরিবর্তন করবে।
Pattern Space এবং Hold Space এর সাথে কাজ করার আরও কিছু উদাহরণ
h এবং g ব্যবহার করে উদাহরণ:
sed '1h; 2s/dog/cat/; 2g; 3s/fish/elephant/' file.txtএখানে:
- প্রথম লাইনের কপি Hold Space তে সংরক্ষণ করা হবে (
1h), - দ্বিতীয় লাইনে "dog" কে "cat" এ পরিবর্তন করা হবে, এবং Hold Space থেকে সেই লাইনটি Pattern Space তে ফিরিয়ে আনা হবে (
2g), - তৃতীয় লাইনে "fish" কে "elephant" এ পরিবর্তন করা হবে।
H এবং G ব্যবহার:
sed '1H; 2H; 2G; 3s/fish/elephant/' file.txtএখানে:
- প্রথম দুটি লাইন Hold Space তে অ্যাপেন্ড করা হবে (
1Hএবং2H), - দ্বিতীয় লাইনটি Hold Space থেকে Pattern Space তে ফেরত আনা হবে (
2G), - তৃতীয় লাইনে "fish" শব্দটি "elephant"-এ পরিবর্তন করা হবে।
সারাংশ
Pattern Space এবং Hold Space Sed এর দুটি গুরুত্বপূর্ণ ধারণা যা আপনাকে আরও উন্নত এবং শক্তিশালী টেক্সট প্রক্রিয়াকরণ করতে সাহায্য করে। Pattern Space তে বর্তমান কাজ করা লাইন থাকে এবং এখানে পরিবর্তন করা হয়, আর Hold Space তে অতিরিক্ত বা অস্থায়ী তথ্য সংরক্ষণ করা হয় যেটি পরে Pattern Space তে ফিরিয়ে আনা যেতে পারে। এগুলি একে অপরের সাথে সহযোগিতা করে complex টেক্সট পরিবর্তন বা প্রক্রিয়াকরণ করতে ব্যবহৃত হয়।
Read more