Grep

Grep

মধ্যম

ভূমিকা

আপনি একটি স্থানীয় লাইব্রেরিতে চাকরি নিয়েছেন, সেখানকার পুরনো বইয়ের সংগ্রহ গুছিয়ে রাখতে সাহায্য করবেন। শিক্ষার্থী পাঠকেরা প্রায়ই তাদের টার্ম পেপারে উদ্ধৃতি দেওয়ার জন্য অর্ধেক-মনে-পড়া কোনো বাক্য খুঁজতে থাকে। প্রতিটি বই শুরু থেকে শেষ পর্যন্ত নিজে পড়ার বদলে, আপনি সেগুলো স্ক্যান করার জন্য একটি ছোট টুল বানানোর সিদ্ধান্ত নিলেন, যাতে ওই আংশিক উদ্ধৃতিগুলো খুঁজে পাওয়া যায়।

নির্দেশনা

একটি সার্চ স্ট্রিং-এর সাথে মেলে এমন লাইন ফাইলগুলোতে খুঁজুন এবং মেলে যাওয়া সব লাইন রিটার্ন করুন।

ইউনিক্সের grep কমান্ড রেগুলার এক্সপ্রেশনের সাথে মেলে এমন লাইন ফাইলগুলোতে খোঁজে। আপনার কাজ হলো একটি সরলীকৃত grep কমান্ড তৈরি করা, যা নির্দিষ্ট স্ট্রিং খোঁজার সুবিধা দেয়।

grep কমান্ড তিনটি আর্গুমেন্ট নেয়:

  1. যে স্ট্রিংটি খুঁজতে হবে।
  2. কমান্ডের আচরণ কাস্টমাইজ করার জন্য শূন্য বা তার বেশি ফ্ল্যাগ।
  3. যে এক বা একাধিক ফাইলে খুঁজতে হবে।

এরপর এটি নির্দিষ্ট করা ফাইলগুলোর বিষয়বস্তু (নির্দিষ্ট করা ক্রমে) পড়ে, যে লাইনগুলোতে সার্চ স্ট্রিং আছে সেগুলো খুঁজে বের করে, এবং সবশেষে যে ক্রমে লাইনগুলো পাওয়া গেছে সেই ক্রমে সেগুলো রিটার্ন করে। একাধিক ফাইলে খোঁজার সময়, প্রতিটি মেলে যাওয়া লাইনের শুরুতে ফাইলের নাম ও একটি কোলন (':') যোগ করা হয়।

ফ্ল্যাগ

grep কমান্ড নিচের ফ্ল্যাগগুলো সমর্থন করে:

  • -n আউটপুটের প্রতিটি লাইনের আগে লাইন নম্বর ও একটি কোলন (':') বসান, ফাইলের নাম থাকলে নম্বরটি তার পরে বসান।
  • -l শুধু সেই ফাইলগুলোর নাম আউটপুট করুন যেগুলোতে অন্তত একটি মেলে যাওয়া লাইন আছে।
  • -i কেস-ইনসেনসিটিভ তুলনা ব্যবহার করে মেলান।
  • -v প্রোগ্রামটি উল্টে দিন: যে লাইনগুলো মেলে না সেগুলো সংগ্রহ করুন।
  • -x শুধু সেই লাইনগুলো খুঁজুন যেখানে সার্চ স্ট্রিং পুরো লাইনের সাথে মেলে।

এরর হ্যান্ডলিং

এই অনুশীলনীতে anyhow ক্রেটটির সাথে পরিচয় করানো হয়েছে, যা যেকোনো ধরনের এরর টাইপ সামলানো সহজ করে তোলে। এর লক্ষ্য হলো, আপনি যখন কোনো অ্যাপ্লিকেশন লেখেন, তখন আপনার কল করা ফাংশনটি কোন নির্দিষ্ট এররগুলো রিটার্ন করছে তা নিয়ে দুশ্চিন্তা করতে না হয়, বরং সেগুলো প্রোপাগেট করার সময় শুধু সঠিক কাজটি করলেই হয়।

দ্রষ্টব্য: এখানে আমরা যেমনটি করছি, তেমনি লাইব্রেরি লেখার সময় আসলে anyhow ব্যবহার করা তেমন ভালো রীতির নয়; লাইব্রেরি লেখার সময় নিজের একটি Error এনাম লেখা আরও স্পষ্ট এবং আরও কাজের (সম্ভবত thiserror ক্রেট-এ দেওয়া হেল্পার ম্যাক্রোগুলোর সহায়তায়)। তবে এই ক্রেটটির ব্যবহার দেখানোর জন্যই আমরা এখানে সচেতনভাবে এবং স্পষ্টভাবেই এটি করছি।

এই ক্রেট সম্পর্কে আরও জানতে এর ডকুমেন্টেশন দেখুন।

আরও পড়া

এই অনুশীলনীতে grep-এর সবচেয়ে মৌলিক ফাংশনগুলোই কেবল বাস্তবায়ন করতে বলা হয়েছে, কিন্তু আসলে Rust-এ grep সম্পূর্ণভাবে নতুন করে লেখার একটি প্রকল্প আছে - ripgrep।

Rust-এ মৌলিক ইউটিলিটি প্রোগ্রামগুলো নতুন করে লেখার ধারণাটি আপনার ভালো লেগে থাকলে নিচের প্রকল্পগুলো দেখে নিতে ভুলবেন না:

  • fd - find-এর একটি ক্লোন
  • exa - ls-এর একটি ক্লোন
  • bat - cat-এর একটি ক্লোন
  • coreutils - GNU coreutils-এর একটি রিরাইট
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Rust Exercism

Grep শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Rust ট্র্যাকের 99টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।