Sun. Jul 17th, 2022

bashshell

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

grep দিয়ে ফাইলের নাম প্রদর্শন করা হচ্ছে

ডিফল্টরূপে, যদি আপনি একাধিক ফাইল পাস করেন grepএটা প্রদর্শিত হবে filename: স্পষ্টতার জন্য ম্যাচিং লাইনের আগে। আপনি আসলে সঙ্গে এই আচরণ বন্ধ করতে পারেন -h পতাকা, যা কখনই ফাইলের নাম প্রদর্শন করবে না:

যাইহোক, যদি আপনি শুধুমাত্র একটি ফাইল পাস করেন grep, এটি ডিফল্টরূপে ফাইলের নাম প্রদর্শন করবে না। শেল স্ক্রিপ্টগুলির সাথে স্বয়ংক্রিয় করার সময় এটি একটি সমস্যা হতে পারে, কারণ আপনি হয়তো জানেন না যে একটি ডিরেক্টরিতে কতগুলি ফাইল রয়েছে এবং এটি ফাইলের নামের উপর নির্ভর করে অটোমেশন ভেঙে দিতে পারে।

দ্য সহজ সমাধান হল বড় হাতের অক্ষর ব্যবহার করা -H পতাকাযা বিপরীত করে -h এবং সর্বদা ফাইলের নাম চালু করবে যা যাই হোক না কেন, এমনকি ইনপুট হিসাবে শুধুমাত্র একটি ফাইল পাস করলেও।

grep -H "foo" file

দ্য -H ফ্ল্যাগের আরেকটি অপ্রত্যাশিত কিন্তু দরকারী প্রভাব রয়েছে—যখন থেকে ইনপুট দিয়ে পেয়ার করা হয় stdinযেমন ইউনিক্স পাইপ, এটি মুদ্রণ করবে (standard input): ফাইলের নামের জায়গায়।

grep এর সাথে লাইন নম্বর প্রদর্শন করা হচ্ছে

আপনি এর সাথে একযোগে এটি ব্যবহার করতে পারেন -n লাইন নম্বর পেতে পতাকা:

grep -Hn "foo"

একটি POSIX কমপ্লায়েন্ট হ্যাক

দ্য -H পতাকা grep POSIX অনুগত নয় এবং আরও কিছু অস্পষ্ট ইউনিক্স-ভিত্তিক অপারেটিং সিস্টেম উপলব্ধ নয়। ভাগ্যক্রমে, একটি হ্যাক আছে যা আপনি পাস করে ব্যবহার করতে পারেন /dev/null একটি জাল দ্বিতীয় ফাইল ইনপুট হিসাবে grepযা একাধিক ফাইল আছে তা ভাবতে কৌশল করে:

%d bloggers like this: