Grep

Grep

মধ্যম

ভূমিকা

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

নির্দেশনা

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

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

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

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

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

ফ্ল্যাগ

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

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

Node প্রক্রিয়া

অন্য অনুশীলনীগুলোর মতো নয়, grep.js ফাইলটি grep.spec.js টেস্ট ফাইলের ভেতরে ইমপোর্ট করা হয় না। বরং এটিকে একটি এক্সিকিউটেবলের মতো ব্যবহার করা হবে। সেটি সহজ করতে, grep.js ফাইলটিতে একটি শিব্যাং এবং একটি কমেন্ট দেওয়া হয়েছে, যেখানে এটা কী করে তা ব্যাখ্যা করা আছে:

#!/usr/bin/env node

// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)

টেস্টগুলো নতুন একটি node প্রক্রিয়া চালু করবে, আর সেটি grep.js চালাবে।

আর্গুমেন্ট পড়া

প্রক্রিয়াটি যে আর্গুমেন্টগুলো নিয়ে চালু হয়েছিল, সেগুলো পেতে process.argv ব্যবহার করুন।

ফাইল পড়া

readLines ফাংশনটি দেওয়া আছে। এটি ব্যবহার করতে ফাইল পাথ বদলানোর কোনো দরকার নেই। readlines ফাংশনটি বর্তমান ওয়ার্কিং ডিরেক্টরি থেকে পাথটি রিজলভ করবে, যা grep.js প্রক্রিয়াগুলোর ক্ষেত্রে অনুশীলনী ডিরেক্টরিতে সেট করা থাকে।

আউটপুট লেখা

আউটপুট লিখতে ব্যবহার করুন

  • স্ট্যান্ডার্ড আউটপুট স্ট্রিমে লিখতে console.log,
  • স্ট্যান্ডার্ড এরর স্ট্রিমে লিখতে console.error.

স্ট্যান্ডার্ড এরর স্ট্রিমে কিছু লেখা না থাকলে টেস্টগুলো এক্সিকিউশনকে সফল (রিজলভড) বলে ধরে নেয়, আর স্ট্যান্ডার্ড এরর স্ট্রিমে কিছু লেখা থাকলে অসফল (রিজেক্টেড) বলে ধরে নেয়।

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

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

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