"হ্যালো" স্ট্রিংযুক্ত যে কোনও এবং সমস্ত ফাইলের জন্য বর্তমান ডিরেক্টরিটি অনুসন্ধান করার জন্য আমি গ্রেপ ব্যবহার করব এবং কেবলমাত্র .h এবং .cc ফাইলগুলি প্রদর্শন করব?
"হ্যালো" স্ট্রিংযুক্ত যে কোনও এবং সমস্ত ফাইলের জন্য বর্তমান ডিরেক্টরিটি অনুসন্ধান করার জন্য আমি গ্রেপ ব্যবহার করব এবং কেবলমাত্র .h এবং .cc ফাইলগুলি প্রদর্শন করব?
উত্তর:
grep -r --include=*.{cc,h} "hello" .
এটি পড়ছে: সমস্ত .cc বা .h ফাইলগুলির জন্য পুনরাবৃত্তভাবে অনুসন্ধান করুন (সমস্ত উপ ডিরেক্টরিতেও) এই .
(বর্তমান) ডিরেক্টরিতে "হ্যালো" ধারণ করে
আপনি ফাইলের নাম উল্লেখ বা স্টিডিন ব্যবহারের পরিবর্তে ওয়াইল্ডকার্ডগুলিতে পাস করতে পারেন।
grep hello *.h *.cc
-R
দুর্ভাগ্যজনকভাবে কাজ করে না। এটি *
পুনরাবৃত্ত হওয়ার আগে প্রসারিত করে ।
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
।
বিশদটির জন্য find
এবং ম্যানুয়াল পৃষ্ঠাগুলি পরীক্ষা xargs
করুন।
-print0
পরে থাকতে হবে '*.cc'
অন্যথায় আপনার কাছে অনুসন্ধানের সেই অংশটির জন্য কোনও পদক্ষেপ নেই। অথবা আপনি কি সেখানে প্রথম বন্ধনী সন্নিবেশ করতে হবে: find . \( -name '*.cc' -or -name '*.h' \) -print0
।
find -exec +
xargs এর পরিবর্তে বাক্য
-exec grep "hello" {} +
যেখানে বন্ধনীগুলির জুড়ি ফাইলের নাম (গুলি) উপস্থাপন করে। ভাল পরামর্শ।
আপনার যদি পুনরাবৃত্ত অনুসন্ধানের প্রয়োজন হয় তবে আপনার কাছে বিভিন্ন বিকল্প রয়েছে। আপনার বিবেচনা করা উচিত ack
।
এটি ব্যর্থ হচ্ছে, যদি আপনার জিএনইউ থাকে find
এবং xargs
:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
ব্যবহারের /dev/null
ফলে আপনি ফাইলের নাম মুদ্রিত হয়ে যায় তা নিশ্চিত করে; -print0
এবং -0
ফাইল ধারণকারী স্পেস নাম (নতুন লাইন, ইত্যাদি) সঙ্গে ঘটনাও ঘটে।
আপনার যদি বাধাজনক নাম না থাকে (ফাঁকা জায়গা সহ), আপনি এটি ব্যবহার করতে পারেন:
find . -name '*.*[ch]' -print | xargs grep hello /dev/null
এটি আপনার উদ্দেশ্য নয় এমন কয়েকটি নাম বেছে নিতে পারে কারণ প্যাটার্ন ম্যাচটি ফজিয়ার (তবে সহজ) তবে অন্যথায় কাজ করে। এবং এটি নন-জিএনইউ সংস্করণ find
এবং এর সাথে কাজ করে xargs
।
find ... -exec grep "hello" {} +
আমি যদি আপনার প্রশ্নটি মনোযোগ সহকারে পড়ি, আপনি "ডিরেক্টরিটি বর্তমান ডিরেক্টরিটি সন্ধান করতে" বলতে পারেন " কে "হ্যালো" স্ট্রিং সহ যে কোনও এবং সমস্ত ফাইলেরএবং কেবলমাত্র .h এবং .cc ফাইলগুলি প্রদর্শন করুন "। সুতরাং আপনার যথাযথ প্রয়োজনীয়তা মেটাতে এখানে আমার জমা দেওয়া হল:
এটি ফাইলের নামগুলি প্রদর্শন করে:
grep -lR hello * | egrep '(cc|h)$'
... এবং এটি ফাইলের নাম এবং সামগ্রীগুলি প্রদর্শন করে:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
grep -l hello **/*.{h,cc}
shopt -s nullglob
.H বা কোন .cc ফাইল না থাকলে আপনি ত্রুটি বার্তাগুলি এড়াতে চাইতে পারেন ।
সহজতম উপায়: গ্রেপ -আপনি "আপনার পাঠ্য" /
grep -si "hello" --include=*.{cc,h} ./* ./.*
(লুকানো ফাইলগুলিও অনুসন্ধান করে)। এখানে সব / গোপন ফাইলের মধ্যে একটি স্ট্রিং জন্য অনুসন্ধান করতে একটি জেনেরিক সংস্করণ:grep -s "hello" * .*
। হয়তো সবচেয়ে সাধারণত দরকারী (এবং সহজ), জন্য "হ্যালো" এই অনুসন্ধানসমূহ সমস্ত অ-গোপন ফাইল:grep -si "hello" ./*
এই পোস্টে ধন্যবাদ: askubuntu.com/a/777456