দুজন কমান্ড তুলনা খুঁজে


12

সম্প্রতি আমি এই findওয়ান-লাইনারটি পেয়েছি তবে নীচের দুটির পার্থক্যটি কোথা থেকে এসেছে তা আমি ব্যাখ্যা করতে পারছি না:

উদাহরণ 1

[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;

./names:Madison Randy:300:Product Development

উদাহরণ 2

[root@centos share]# find . -exec grep -i "madis" {} \;

Madison Randy:300:Product Development

আপনি দেখতে পাচ্ছেন, প্রথমটির মধ্যে একটি নির্দিষ্ট ফাইল রয়েছে যা এই স্ট্রিংটি উত্পন্ন এবং এখনও অবধি আমি কেন এটি ঘটছে তা সন্ধান করতে সক্ষম নই।

উত্তর:


17

আপনি 2 টি অবস্থান অনুসন্ধান করতে গ্রেপকে বলছেন। গ্রেপ কেবলমাত্র একাধিক অবস্থান অনুসন্ধান করা হলে পুরো অবস্থানটি দেখায়।

উদাহরণ স্বরূপ

touch /tmp/herp /tmp/derp
cd /tmp
echo "foo" > herp
echo "foo" > derp

লক্ষ্য করুন আমি কীভাবে মাত্র 1 ফাইল অনুসন্ধান করি, গ্রেপ ফাইলটির নাম বাদ দেয়

grep -i "foo" /tmp/herp
foo

তবে আমি যদি একাধিক অনুসন্ধানের অবস্থান নির্দিষ্ট করে থাকি তবে গ্রেপ বলে যে এটি প্রতিটি মিল খুঁজে পেয়েছে

grep -i "foo" herp derp
/tmp/derp:foo
/tmp/herp:foo

যুক্ত করা /dev/nullহচ্ছে এটি 2 টি আর্গুমেন্ট সরবরাহ করে পুরো পথটি মুদ্রণের জন্য গ্রেপকে ট্রিক করছে king


1
+1 তবে আপনি "স্পষ্টত" উল্লেখ করতে ভুলে গেছেন: "যুক্ত হওয়া ফাইলটি /dev/nullহ'ল গ্রেফ-এড যা আছে তা (খালি) /dev/nullফাইলে খুঁজে পাওয়া যাবে না তা নিশ্চিত করার কারণ , কেবলমাত্র সঠিক অবস্থানগুলি আউটপুট হয়েছে"
অলিভিয়ার ডুলাক

তবে এছাড়াও, অনুসন্ধান করে /dev/nullআপনি খালি খালি ডামি ফাইলের মাধ্যমে সিচিংয়ে কোনও সময় নষ্ট করবেন না। এবং পরিশেষে, অনুসন্ধানের অভিপ্রায়টি /dev/nullএই প্রতিমাটির সাথে পরিচিতদের কাছে সুস্পষ্ট।
অ্যালেক্সিস

5

man grep:

-এইচ, - ফাইল-নাম সহ

প্রতিটি ম্যাচের জন্য ফাইলের নাম মুদ্রণ করুন। অনুসন্ধানের জন্য একাধিক ফাইল উপস্থিত থাকলে এটি ডিফল্ট।

দুটি ক্ষেত্রে এক বা দুটি ফাইল আর্গুমেন্টের সাথে গ্রেপ থেকে ডেকে আনা পার্থক্যের ফলাফল। যুক্ত করার পরিবর্তে /dev/nullআপনি grepযুক্তি দিয়ে কল করতে পারেন -H/dev/nullআচরণ আরও ব্যাপকভাবে সমর্থিত হতে পারে ।


3
grep -Hপোর্টেবল নয় - /dev/nullট্রিকটি জিএনইউ গ্রেপ ছাড়াই কাজ করে।
ক্রিস ডাউন

4

প্রথম উদাহরণটি findএক্সপ্রেশন ফলাফল হিসাবে পাওয়া প্রতিটি ফাইলের জন্য দুটি ফাইলের উপর গ্রাপ চালানোর সমতুল্য । উদাহরণস্বরূপ, যদি findখুঁজে বের করে তিনটি ফাইল a.txt, b.txtএবং c.txtতারপর grepহিসাবে চালানো হবে

grep -i "madis" a.txt /dev/null
grep -i "madis" b.txt /dev/null 
grep -i "madis" c.txt /dev/null

যার grepসাথে ফাইলের নাম দেখাবে যার জন্য আউটপুট মেলে। যেহেতু কোনও কিছুই / dev / নালটির সাথে মেলে না, এটি গ্যারান্টিযুক্ত যে এটি মিললে প্রথম ফাইলটির ফাইলের নাম মুদ্রিত হবে।

যেখানে দ্বিতীয় উদাহরণটি সমান

grep -i "madis" a.txt
grep -i "madis" b.txt 
grep -i "madis" c.txt 

এক্ষেত্রে কেবলমাত্র একটি যুক্তি থাকায় ফাইলের নামটি ম্যাচের জন্য মুদ্রিত হবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.