এই গাইডে grep ইউটিলিটি ব্যবহার করে একাধিক ওয়ার্ড, স্ট্রিং, এবং প্যাটার্ন সার্চ করার পদ্ধতি ব্যাখ্যা করা হয়েছে। নিচে কমান্ডের পূর্ণ উদাহরণ দেওয়া আছে।
Grep কী?
যখন আমরা grep বলি, আমরা কমান্ড-লাইন ফাংশন-এর কথা বলি। Grep মানে Global Regular Expression Print। সারসংক্ষেপে, এটি ইনপুট ফাইলগুলো সার্চ করে যেসব লাইন একটি নির্দিষ্ট রেগুলার এক্সপ্রেশনের সাথে ম্যাচ করে। তারপর প্রতিটি লাইন স্ট্যান্ডার্ড আউটপুট-এ লিখে রেজাল্ট রিটার্ন করে।
grep ইউটিলিটি তিনটি এক্সপ্রেশন সিনট্যাক্সের জন্য উপযুক্ত। এগুলো Basic, Extended বা Perl-compatible হিসেবে স্পেসিফাই করা যায়। যদি কোনো রেগুলার এক্সপ্রেশন সিনট্যাক্স স্পেসিফাই না করা হয়, তবে GNU grep সার্চ প্যাটার্নগুলোকে বেসিক এক্সপ্রেশন হিসেবে সেট করে।
একাধিক প্যাটার্নের জন্য Grep
আপনি যদি একাধিক প্যাটার্ন সার্চ করতে চান, তবে OR অপারেটর ব্যবহার করতে পারেন, যাকে অল্টারনেশন অপারেটর বলা হয়। এই অপারেটর/পাইপটি নিচের মতো দেখে: |
এটি ব্যবহারকারীকে সকল সম্ভাব্য ম্যাচ স্পেসিফাই করতে দেয়, চাহে সেটি এক্সপ্রেশন সেট হোক বা লিটারেল স্ট্রিং। তাই, একাধিক প্যাটার্ন সার্চ করার জন্য ইনপুট হবে:
$ grep 'first pattern\|second pattern' filename
‘first pattern‘ এবং ‘second pattern‘ কে আপনার সার্চ করার প্যাটার্নগুলো দিয়ে রিপ্লেস করুন। এই রেগুলার এক্সপ্রেশন — ‘first pattern\|second pattern‘ — সবসময় সিঙ্গেল কোটেশন মার্কে এক্লোজড থাকতে হবে। পাইপ সিম্বল অল্টারনেশন অপারেটর হিসেবে সাপোর্টেড নয় এবং তাই এস্কেপ (ব্যাকস্ল্যাশ) ক্যারেক্টার দরকার grep-কে পাইপকে ভিন্নভাবে ইনস্ট্রাক্ট করার জন্য।
ইন্টেন্ডেড প্যাটার্নকে এক্সটেন্ডেড রেগুলার এক্সপ্রেশন হিসেবে স্পেসিফাই করতে ‘-e‘ বা ‘—extended-regexp‘ ব্যবহার করা যায়। উদাহরণস্বরূপ:
$ grep -E 'first pattern|second pattern' filename
এক্সটেন্ডেড রেজেক্সে, পাইপ এস্কেপ করার দরকার নেই।
ফাইলের মাধ্যমে সার্চ করা যায়, তাই presentation.txt-এ প্যাটার্ন সার্চ করতে নিচের মতো হতে পারে:
$ grep -E 'first pattern|second pattern' presentation.txt
আউটপুটে আপনার সার্চ করা স্ট্রিংগুলো হাইলাইটেড দেখাবে।
যদি ফাইলটি অন্য ডিরেক্টরিতে থাকে, তবে grep-কে স্রেক্টিক उस ডিরেক্টরিতে সার্চ করার জন্য ফুল ফাইল পথ ব্যবহার করতে হবে। উদাহরণস্বরূপ:
$ grep -E 'first pattern|second pattern' /home/presentation.txt
একাধিক স্ট্রিং-এর জন্য Grep
সবচেয়ে বেসিক প্যাটার্ন হচ্ছে লিটারেল স্ট্রিং। একাধিক স্ট্রিং সার্চ করতে, grep কমান্ডের পরে সেগুলো লিখুন। মনে করুন আমরা ‘one‘, ‘two‘, এবং ‘three‘ সার্চ করছি। সেটি নিচের মতো দেখাবে:
$ grep 'one\|two\|three'
সেটিরপর command-এর সাথে সার্চ করার ফাইলটি যোগ করুন। এক্সটেন্ডেড রেগুলার এক্সপ্রেশন ব্যবহার করলে আপনি মূলত ‘\‘ রিমুভ করছেন। উদাহরণস্বরূপ:
$ grep -E 'one|two|three'
কেস সেনসিটিভিটি ইগনোর করা
‘grep’ কমান্ড কেস সেনসিটিভ। লেটার কেস ইগনোর করতে ‘-i‘ বা ‘—ignore-case‘ অপশন আহ্বান করুন। উদাহরণস্বরূপ:
$ grep -i 'one\|two\|three'
একাধিক ম্যাচের কাউন্ট ডিসপ্লে করা
আপনি যদি একটি লগ ফাইলে থাকেন এবং জানতে চান ওয়ার্নিং এবং এরর মেসেজের সংখ্যা বেড়েছে কিনা, কিন্তু ফুল ডিটেইলড রেজাল্ট ছাড়া, তবে ‘-c‘ ব্যবহার করতে পারেন। myapp.log ফাইলে একাধিক ম্যাচ কাউন্ট করতে নিচের মতো হবে:
grep -c 'one\|two\|three' /var/log/myapp.log
নির্দিষ্ট ফাইল টাইপে একাধিক প্যাটার্ন Grep করা
একাধিক স্ট্রিং নির্দিষ্ট ফাইল টাইপে সার্চ করা যায়। এটি আপনাকে অনুমতি দেয়, উদাহরণস্বরূপ, একটি ডিরেক্টরির সকল টেক্সট ফাইল বা সকল লগফাইল সার্চ করতে। ফাইলনেমের বদলে ফাইল এক্সটেনশনসহ একটি অ্যাসটেরিস্ক ব্যবহার করলে grep-কে ইনস্ট্রাক্ট করবে। উপরের এরর মেসেজ উদাহরণ ব্যবহার করে, সকল লগ ফাইল খোঁজা নিচের মতো দেখাবে:
grep -c 'one\|two\|three' /var/log/*.log
রিকার্সিভলি একাধিক ম্যাচ সার্চ করা
অ্যাসটেরিস্ক ব্যবহার করলে grep শুধু কারেন্ট ডিরেক্টরি সার্চ করবে। আপনি যদি সকল সাবডিরেক্টরিইনক্লুড করতে চান, তবে ‘-R’ অপশন ব্যবহার করুন:
grep -R 'one\|two\|three' /var/log/*.log
এটি স্পেসিফাইড var/log/ ডিরেক্টরি এবং সাবডিরেক্টরিতে পাওয়া সকল ফাইলের জন্য রেজাল্ট রিটার্ন করবে।
এگزাক্ট ম্যাচের জন্য grep ব্যবহার করা
‘grep’ কমান্ড স্ট্রিং এম্বেডেড থাকা সকল রেজাল্ট দেখাবে, শুধু এক্সাক্ট ম্যাচ নয়। উদাহরণস্বরূপ, ‘value’ সার্চ করলে ‘values’ এবং ‘valued’-ও প্রিন্ট করবে। আপনি যদি শুধু পুরো শব্দের এক্সাক্ট ম্যাচ চান, তবে ‘-w‘ বা ‘—word-regexp‘ ব্যবহার করুন। ‘one‘, ‘two‘, এবং ‘three‘-র এক্সাক্ট ম্যাচ সার্চ করলে নিচের মতো দেখাবে:
$ grep -w 'one\|two\|three'
ওয়ার্ড ক্যারেক্টার ইনক্লুড করে অ্যালফানিউমেরিক, যাতে 0-9 এবং a-z প্লাস আন্ডারস্কোর ক্যারেক্টার। অন্য সব নন-ওয়ার্ড ক্যারেক্টার হিসেবে বিবেচিত হয়।