আপনি একটি স্থানীয় লাইব্রেরিতে চাকরি নিয়েছেন, সেখানকার পুরনো বইয়ের সংগ্রহ গুছিয়ে রাখতে সাহায্য করবেন। শিক্ষার্থী পাঠকেরা প্রায়ই তাদের টার্ম পেপারে উদ্ধৃতি দেওয়ার জন্য অর্ধেক-মনে-পড়া কোনো বাক্য খুঁজতে থাকে। প্রতিটি বই শুরু থেকে শেষ পর্যন্ত নিজে পড়ার বদলে, আপনি সেগুলো স্ক্যান করার জন্য একটি ছোট টুল বানানোর সিদ্ধান্ত নিলেন, যাতে ওই আংশিক উদ্ধৃতিগুলো খুঁজে পাওয়া যায়।
একটি সার্চ স্ট্রিং-এর সাথে মেলে এমন লাইন ফাইলগুলোতে খুঁজুন এবং মেলে যাওয়া সব লাইন রিটার্ন করুন।
ইউনিক্সের grep কমান্ড রেগুলার এক্সপ্রেশনের সাথে মেলে এমন লাইন ফাইলগুলোতে খোঁজে।
আপনার কাজ হলো একটি সরলীকৃত grep কমান্ড তৈরি করা, যা নির্দিষ্ট স্ট্রিং খোঁজার সুবিধা দেয়।
grep কমান্ড তিনটি আর্গুমেন্ট নেয়:
এরপর এটি নির্দিষ্ট করা ফাইলগুলোর বিষয়বস্তু (নির্দিষ্ট করা ক্রমে) পড়ে, যে লাইনগুলোতে সার্চ স্ট্রিং আছে সেগুলো খুঁজে বের করে, এবং সবশেষে যে ক্রমে লাইনগুলো পাওয়া গেছে সেই ক্রমে সেগুলো রিটার্ন করে। একাধিক ফাইলে খোঁজার সময়, প্রতিটি মেলে যাওয়া লাইনের শুরুতে ফাইলের নাম ও একটি কোলন (':') যোগ করা হয়।
grep কমান্ড নিচের ফ্ল্যাগগুলো সমর্থন করে:
-n আউটপুটের প্রতিটি লাইনের আগে লাইন নম্বর ও একটি কোলন (':') বসান, ফাইলের নাম থাকলে নম্বরটি তার পরে বসান।-l শুধু সেই ফাইলগুলোর নাম আউটপুট করুন যেগুলোতে অন্তত একটি মেলে যাওয়া লাইন আছে।-i কেস-ইনসেনসিটিভ তুলনা ব্যবহার করে মেলান।-v প্রোগ্রামটি উল্টে দিন: যে লাইনগুলো মেলে না সেগুলো সংগ্রহ করুন।-x শুধু সেই লাইনগুলো খুঁজুন যেখানে সার্চ স্ট্রিং পুরো লাইনের সাথে মেলে।ইমপ্লিমেন্ট করুন:
grep ( pattern flags files -- lines )pattern হলো খোঁজার স্ট্রিং, flags হলো "-n", "-l", "-i", "-v" বা "-x" ফ্ল্যাগ স্ট্রিংয়ের শূন্য বা তার বেশি সদস্যের একটি অ্যারে, এবং files হলো এক বা তার বেশি ফাইল নামের একটি অ্যারে। মিলে যাওয়া লাইনগুলো (চাওয়া হলে ফাইল নাম ও লাইন নম্বরের প্রিফিক্স-সহ) স্ট্রিংয়ের অ্যারে হিসেবে রিটার্ন করুন।
-l ফ্ল্যাগ দেওয়া হলে, যে ফাইলগুলোতে অন্তত একটি মিল আছে সেই ফাইলগুলোর নামের একটি অ্যারে রিটার্ন করুন।
file-lines দিয়ে একটি ফাইলের লাইনগুলো পড়ুন, একটি এনকোডিং পাস করে:
USING: io.encodings.utf8 io.files ;
"iliad.txt" utf8 file-lines
! => { "Achilles sing, O Goddess! Peleus' son;" ... }
তিনটি ফিক্সচার ফাইল (iliad.txt, midsummer-night.txt আর paradise-lost.txt) অনুশীলনীর সাথে ওয়ার্কিং ডিরেক্টরিতে দেওয়া থাকে, তাই নাম দিয়ে সেগুলো পড়া কোনো ঝামেলা ছাড়াই কাজ করে।
Exercism-এ সাইন আপ করুন, Factor ট্র্যাকের 47টি কনসেপ্ট163টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।