Grep

Grep

মধ্যম

ভূমিকা

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

নির্দেশনা

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

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

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

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

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

ফ্ল্যাগ

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

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

grep করবেন কি করবেন না, এটাই প্রশ্ন

যদিও grep-কে আর্গুমেন্টগুলো পাস করে দিলেই এই অনুশীলনীটি সহজে সমাধান করা যায়, তবুও এই অনুশীলনীটি কেবল bash ব্যবহার করেই সমাধান করুন। এই Exercism ট্র্যাকের উদ্দেশ্য হলো সমস্যা সমাধানের জন্য bash-এর বিল্ট-ইন কমান্ডগুলো কীভাবে ব্যবহার করতে হয়, তা শেখা।

এই অনুশীলনীটি সমাধান করতে হলে আপনাকে যা করতে হবে:

  • কমান্ড লাইন আর্গুমেন্ট পার্স করা: এর জন্য getopts কাজে লাগবে।
  • একটি ফাইলের লাইনগুলোর উপর ইটারেশন করা: এর জন্য bash FAQ #1 দ্রষ্টব্য।
  • রেগুলার এক্সপ্রেশন ম্যাচিং ব্যবহার করা: bash [[ ... ]]-এর ভেতরে =~ অপারেটর ব্যবহার করে এটি করতে পারে।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Bash Exercism

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

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