
1974 সাল থেকে লিনাক্স grep
কমান্ড মানুষকে ফাইলে স্ট্রিং খুঁজে পেতে সাহায্য করছে। কিন্তু মাঝে মাঝে grep
শুধু খুব পুঙ্খানুপুঙ্খ. এখানে বলার বিভিন্ন উপায় আছে grep
বিভিন্ন জিনিস উপেক্ষা করা।
grepCommand
দ্য grep
কমান্ড টেক্সট ফাইল অনুসন্ধান করে যে স্ট্রিংগুলির সন্ধান করে যা কমান্ড লাইনে আপনার প্রদান করা অনুসন্ধানের ধরণগুলির সাথে মেলে। এর ক্ষমতা grep
নিয়মিত অভিব্যক্তির ব্যবহারে পড়ুন। এটি আপনাকে স্পষ্টভাবে সংজ্ঞায়িত করার পরিবর্তে আপনি যা খুঁজছেন তা বর্ণনা করতে দেয়।
এর জন্ম grep
লিনাক্সের পূর্ববর্তী। এটি ইউনিক্স-এ 1970-এর দশকের গোড়ার দিকে বিকশিত হয়েছিল। এটিতে g/re/p কী ক্রম থেকে এর নাম নেওয়া হয়েছে ed
লাইন সম্পাদক (প্রসঙ্গক্রমে, উচ্চারিত “ই-ডি”)। এই জন্য দাঁড়িয়েছে জিলোবাল পুনরায়নিয়মিত এক্সপ্রেস অনুসন্ধান, পিরেন্ট ম্যাচিং লাইন.
grep
বিখ্যাতভাবে-সম্ভবত, কুখ্যাতভাবে-পুঙ্খানুপুঙ্খ এবং একক মনের। কখনও কখনও এটি ফাইল বা ডিরেক্টরিগুলি অনুসন্ধান করবে যা আপনি বরং এটির সময় নষ্ট করবেন না, কারণ ফলাফলগুলি আপনাকে গাছের কাঠ দেখতে অক্ষম করতে পারে৷
অবশ্যই, grep-এ রাজত্ব করার উপায় আছে। আপনি এটিকে প্যাটার্ন, ফাইল এবং ডিরেক্টরি উপেক্ষা করতে বলতে পারেন যাতে grep দ্রুত তার অনুসন্ধানগুলি সম্পূর্ণ করে, এবং আপনি অর্থহীন মিথ্যা ইতিবাচক দ্বারা আচ্ছন্ন না হন।
নিদর্শন ব্যতীত
সঙ্গে অনুসন্ধান করতে grep
আপনি অন্য কোনো প্রক্রিয়া থেকে পাইপ ইনপুট করতে পারেন যেমন cat
অথবা আপনি শেষ কমান্ড লাইন প্যারামিটার হিসাবে একটি ফাইলের নাম প্রদান করতে পারেন।
আমরা একটি ছোট ফাইল ব্যবহার করছি যাতে কবিতাটির পাঠ্য রয়েছে জব্বারওকি, লুইস ক্যারল দ্বারা। এই দুটি উদাহরণে, আমরা “জ্যাবারওক” অনুসন্ধান শব্দের সাথে মেলে এমন লাইনগুলি অনুসন্ধান করছি৷
cat jabberwocky.txt | grep "Jabberwock"
grep "Jabberwock" jabberwocky.text
যে লাইনগুলিতে সার্চ ক্লুর সাথে মিল রয়েছে সেগুলি আমাদের জন্য তালিকাভুক্ত করা হয়েছে, প্রতিটি লাইনের মিলিত উপাদান লাল রঙে হাইলাইট করা হয়েছে৷ যে সোজা অনুসন্ধান. কিন্তু যদি আমরা “জ্যাবারওক” শব্দটি ধারণ করে এমন লাইনগুলি বাদ দিতে এবং বাকিগুলি মুদ্রণ করতে চাই?
আমরা সঙ্গে যে সম্পন্ন করতে পারেন -v
(উল্টানো ম্যাচ) বিকল্প। এটি সেই লাইনগুলিকে তালিকাভুক্ত করে যা অনুসন্ধান শব্দের সাথে মেলে না৷
grep -v "Jabberwock" jabberwocky.text
যে লাইনগুলিতে “জ্যাবারওক” নেই সেগুলি টার্মিনাল উইন্ডোতে তালিকাভুক্ত করা হয়েছে।
আমরা আমাদের ইচ্ছা হিসাবে অনেক পদ বাদ দিতে পারেন. আসুন “জ্যাবারওক” এবং “এবং” আছে এমন যেকোন লাইন ফিল্টার করি। এই অর্জন করতে আমরা ব্যবহার করব -e
(অভিব্যক্তি) বিকল্প। আমরা ব্যবহার করছি প্রতিটি অনুসন্ধান প্যাটার্নের জন্য এটি ব্যবহার করতে হবে।
grep -v -e "Jabberwock" -e "and" jabberwocky.txt
আউটপুট লাইনের সংখ্যা একটি সংশ্লিষ্ট ড্রপ আছে.
যদি আমরা ব্যবহার করি -E
(বর্ধিত রেজেক্স) বিকল্প, আমরা “এর সাথে অনুসন্ধানের ধরণগুলি একত্রিত করতে পারি|
“, যা এই প্রসঙ্গে একটি পাইপ নির্দেশ করে না, এটি যৌক্তিক OR
অপারেটর.
grep -Ev "Jabberwock|and" jabberwocky.txt
আমরা আগের, লং-ওয়াইন্ডেড কমান্ডের সাথে ঠিক একই আউটপুট পাই।
কমান্ডের বিন্যাস একই হয় যদি আপনি একটি স্পষ্ট অনুসন্ধান ক্লু পরিবর্তে একটি regex প্যাটার্ন ব্যবহার করতে চান। এই কমান্ডটি “ACHT” সেটের যেকোনো অক্ষর দিয়ে শুরু হওয়া সমস্ত লাইন বাদ দেবে।
grep -Ev "^ACHT" jabberwocky.txt
একটি প্যাটার্ন আছে কিন্তু অন্য প্যাটার্ন ধারণ করে না এমন লাইনগুলি দেখতে, আমরা পাইপ করতে পারি grep
মধ্যে grep
. আমরা “জ্যাবারওক” শব্দটি রয়েছে এমন সমস্ত লাইন অনুসন্ধান করব এবং তারপরে যে কোনও লাইন ফিল্টার করব তাই “হত্যা” শব্দটি ধারণ করে।
grep "Jabberwock" jabberwocky.txt | grep -v "slain"
ফাইল বাদ দিয়ে
আমরা জিজ্ঞাসা করতে পারেন grep
ফাইলের সংগ্রহে একটি স্ট্রিং বা প্যাটার্ন সন্ধান করতে। আপনি কমান্ড লাইনে প্রতিটি ফাইল তালিকাভুক্ত করতে পারেন, কিন্তু অনেক ফাইলের সাথে যে পদ্ধতির স্কেল হয় না।
grep "vorpal" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt
মনে রাখবেন যে ফাইলের নামটি আউটপুটের প্রতিটি লাইনের শুরুতে দেখা যায়।
টাইপিং কমাতে আমরা ওয়াইল্ডকার্ড ব্যবহার করতে পারি। কিন্তু যে বিরোধী হতে পারে. এই কাজ বলে মনে হচ্ছে.
grep "vorpal" *.txt
যাইহোক, এই ডিরেক্টরিতে অন্যান্য TXT ফাইল রয়েছে, কবিতার সাথে কোন সম্পর্ক নেই। যদি আমরা একই কমান্ড কাঠামোর সাথে “তলোয়ার” শব্দটি অনুসন্ধান করি তবে আমরা প্রচুর মিথ্যা ইতিবাচক পাই।
grep "sword" *.txt
আমরা যে ফলাফলগুলি চাই সেগুলি TXT এক্সটেনশন থাকা অন্যান্য ফাইল থেকে মিথ্যা ফলাফলের প্রবাহ দ্বারা মুখোশিত।
“ভর্পাল” শব্দটি কিছুতেই মেলেনি, কিন্তু “তলোয়ার” শব্দটি “পাসওয়ার্ড” এর মধ্যে অন্তর্ভুক্ত তাই এটি কিছু ছদ্ম-লগফাইলে অনেকবার পাওয়া গেছে।
আমরা এই ফাইলগুলি বাদ দিতে হবে. এটা করতে আমরা ব্যবহার করব --exclude
বিকল্প “vol-log-1.txt” নামক একটি ফাইল বাদ দিতে আমরা এই কমান্ডটি ব্যবহার করব:
grep --exclude=vol-log-1.txt "sword" *.txt
এই উদাহরণে, আমরা “ভোল” দিয়ে শুরু হওয়া নামের একাধিক লগ ফাইল বাদ দিতে চাই। আমাদের প্রয়োজন সিনট্যাক্স হল:
grep --exclude=vol*.txt "sword" *.txt
যখন আমরা ব্যবহার করি -R
(dereference recursive) বিকল্প grep
আমাদের জন্য সম্পূর্ণ ডিরেক্টরি গাছ অনুসন্ধান করবে. ডিফল্টরূপে, এটি সেই অবস্থানগুলির সমস্ত ফাইলের মাধ্যমে অনুসন্ধান করবে। আমরা বাদ দিতে চাই এমন একাধিক ধরনের ফাইল থাকতে পারে।
এই টেস্ট মেশিনে বর্তমান ডিরেক্টরির নীচে, লগ ফাইল, CSV ফাইল এবং MD ফাইল ধারণকারী নেস্টেড ডিরেক্টরি রয়েছে। এই সব ধরনের টেক্সট ফাইল যা আমরা বাদ দিতে চাই। আমরা একটি ব্যবহার করতে পারে --exclude
প্রতিটি ফাইল প্রকারের জন্য বিকল্প, কিন্তু আমরা ফাইলের প্রকারগুলিকে গোষ্ঠীবদ্ধ করে আরও দক্ষতার সাথে যা চাই তা অর্জন করতে পারি।
এই কমান্ডটি CSV বা MD এক্সটেনশন আছে এমন সমস্ত ফাইল এবং সমস্ত TXT ফাইল বাদ দেয় যার নাম হয় “ভোল” বা “লগ” দিয়ে শুরু হয়৷
grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /home/dave/data/
ডিরেক্টরি ব্যতীত
আমরা যে ফাইলগুলিকে উপেক্ষা করতে চাই সেগুলি যদি ডিরেক্টরিগুলিতে থাকে এবং সেই ডিরেক্টরিগুলিতে কোনও ফাইল না থাকে যা আমরা অনুসন্ধান করতে চাই, আমরা সেই সম্পূর্ণ ডিরেক্টরিগুলিকে বাদ দিতে পারি৷
ধারণাটি ফাইল বাদ দেওয়ার মতই, আমরা ব্যবহার ব্যতীত --exclude-dir
বিকল্প এবং উপেক্ষা করার জন্য ডিরেক্টরিগুলির নাম দিন।
grep -R --exclude-dir=backup "vorpal" /home/dave/data
আমরা “ব্যাকআপ” ডিরেক্টরিটি বাদ দিয়েছি, কিন্তু আমরা এখনও “ব্যাকআপ2” নামক আরেকটি ডিরেক্টরির মাধ্যমে অনুসন্ধান করছি।
এটা কোন আশ্চর্য হবে না যে আমরা ব্যবহার করতে পারেন --exclude-dir
একক কমান্ডে একাধিকবার বিকল্প। উল্লেখ্য যে বাদ দেওয়া ডিরেক্টরিগুলির পথটি যে ডিরেক্টরিতে অনুসন্ধান শুরু হবে তার সাথে সম্পর্কিত হওয়া উচিত৷ ফাইল সিস্টেমের মূল থেকে পরম পাথ ব্যবহার করবেন না৷
grep -R --exclude-dir=backup --exclude-dir=backup2 "vorpal" /home/dave/data
আমরা গ্রুপিংও ব্যবহার করতে পারি। আমরা একই জিনিস আরও সংক্ষিপ্তভাবে অর্জন করতে পারি:
grep -R --exclude-dir={backup,backup2} "vorpal" /home/dave/data
আপনি একই কমান্ডে ফাইল এবং ডিরেক্টরি বর্জন একত্রিত করতে পারেন। আপনি যদি একটি ডিরেক্টরি থেকে সমস্ত ফাইল বাদ দিতে চান এবং ডিরেক্টরিগুলি থেকে নির্দিষ্ট ফাইল প্রকারগুলি বাদ দিতে চান হয় অনুসন্ধান, এই সিনট্যাক্স ব্যবহার করুন:
grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive "frumious" /home/dave/data
কখনও কখনও এটা আপনি কি ছেড়ে আউট
মাঝে মাঝে সাথে grep
এটা মনে হতে পারে আপনি একটি খড়ের গাদায় একটি সুই খুঁজে বের করার চেষ্টা করছেন। এটা খড়ের গাদা অপসারণ একটি বড় পার্থক্য করে তোলে.
সম্পর্কিত: লিনাক্সে রেগুলার এক্সপ্রেশন (regexes) কিভাবে ব্যবহার করবেন