সন্ধান করুন | গ্রেপ সাইগউইনে কাজ করে না


4

আমি সাইগউইন ইনস্টল করেছি এবং যখন আমি এই কমান্ডটি দিয়ে সোর্স কোডটি অনুসন্ধান করি তখন কিছুই দেখা যায় না, এমনকি আমার কাছে একটি স্ট্রিং রয়েছে string

$ echo foo > bar
$ find . -name '*' | grep foo

কিছুই দেখা যাচ্ছে না। এই কমান্ডটি জিএনইউ + লিনাক্সে দুর্দান্ত কাজ করে।

$ grep foo bar

1
$ find . | xargs grep foo
Xen2050

@ Xen2050 আপনি উত্তর হিসাবে এটি যোগ করতে পারেন, আমি xargs ভুলে গেছি।
jcubic

@jcubic আপনার ব্যবহার findকরার দরকার নেই । আমার উত্তর দেখুন।
ডেভিডপস্টিল

কৌতূহলের বাইরে, $ which findসাইগউইনের কী ফিরে আসে ?
সেলভি Θ

@ সালভোএফ/usr/bin/find
জেকিউবিক

উত্তর:


3

উল্লিখিত হিসাবে, স্টাডআউটে পাওয়া ফাইলগুলির একটি তালিকা খুঁজে বের করুন, গ্রেপ সাধারণত স্টাডাউটের মাধ্যমে অনুসন্ধানের প্রত্যাশা করে যদি এইভাবে বলা হয়।

এছাড়াও নল থেকে খুঁজে পাওয়া যায়নি xargs, এবং এটি "হবে নির্মাণ এবং স্ট্যান্ডার্ড ইনপুট থেকে কমান্ড লাইন চালানো ", হিসাবে

$ find . | xargs grep foo

আপনার যদি নিউলাইন এবং হোয়াট নোট সহ ক্রেজি ফাইলনাম থাকে তবে এটি আরও ভাল হবে:

$ find . -type f -print0 | xargs -0 grep foo

এবং -type fশুধুমাত্র নিয়মিত ফাইল পাবেন, তাই কোনো মাধ্যমে grep কোন প্রচেষ্টা .বা ..বা কোন ডিরেক্টরি বা "মজার" ফাইল।


এটি অগোছালো আউটপুট (লাইনের মতো grep: .: Is a directory এবং grep: ./test: Is a directoryআপনি হয়ত যুক্ত --exclude-dir=*করার বিষয়টি বিবেচনা করতে grepপারেন Or বা grep --exclude-dir=* "foo" ./*আমার উত্তর হিসাবে কেবল ব্যবহার করুন ;)
ডেভিডপস্টিল

@ ডেভিডপস্টিল আমি -type fসেখানে ট্যাগ যুক্ত করতে যাচ্ছিলাম, আমি এই পরিস্থিতিতে সবসময় এটি ব্যবহার করি, তবে আমি প্রশ্নে এবং অন্যান্য উত্তরগুলিতে সাধারণ বিন্যাসের সাথে লেগে ছিলাম । যদিও আমি এটি যুক্ত করব
Xen2050

9
find . -name  '*' # This will produce a list of *file names*

তারপরে আপনি আপনার ফাইলের grepনামের তালিকাটি স্টিডিনে পাস করুন , এটি তালিকাটিকে পাঠ্য হিসাবে সন্ধান করে এবং অনুসন্ধান করেfoo

আপনার কোনও ফাইলের নাম নেই fooতাই এটি কিছুই দেয় না।

যে ফাইলটিতে টেক্সট সন্ধান করছেন সেগুলির মাধ্যমে পুনরাবৃত্তভাবে অনুসন্ধান করতে আপনি সহজেই ব্যবহার করতে পারেন

grep -R foo somefolder/

খুঁজে | লিনাক্সের উপর
গ্রেপ

4
@ জেকিউবিক যদি আপনার কমান্ডটি ফাইন্ড কমান্ড find . -name '*' | grep fooদ্বারা তালিকাভুক্ত ফাইলগুলির ভিতরে ফু শব্দটি খুঁজে পায় তবে আপনার লিনাক্সটি ভেঙে গেছে এবং আপনার একটি বাগ ফাইল করা উচিত।
0x7c0

@ স্টার্টমার্টিনের আমার একটি তত্ত্ব আছে: একটি সাম্প্রতিক জিএনইউ গ্রেপ + alias grep="grep -r"আপনি সেই আচরণটি পেয়েছেন, যেহেতু জিএনইউ কোরিটিলস বিকাশকারীরা তাদের দুর্দান্ত জ্ঞানের grep -rভিত্তিতে সিদ্ধান্ত নিয়েছিলেন যে এসটিডিএন কোনও বুদ্ধিযুক্ত নয় এবং পরিবর্তে আমরা নীরবে এটি বর্তমান ডিরেক্টরিটি গ্রেপ্তারে স্থির করব। আমি ব্যক্তিগতভাবে সেই আচরণটিকে একটি বড় বাগ হিসাবে বিবেচনা করি।
oals

2

আমি যখন এই আদেশটি দিয়ে উত্স কোডটি অনুসন্ধান করি তখন কিছুই দেখা যায় না

$ echo foo > bar
$ find . -name '*' | grep foo

findপছন্দসই মাপদণ্ড পূরণ করে এমন ফাইলের নাম অনুসন্ধান করে: নাম, আকার, ফাইল টাইপ এবং ফাইলের নামের সাথে মিলে একটি তালিকা ফেরত দেয়। এটি ম্যাচের ফাইলগুলির বিষয়বস্তু ফেরত দেয় না ।

ফাইলের নামের যে তালিকা প্রেরণ করা হলে grepনল অপারেটর ব্যবহার grepস্ট্রিং দেখতে হবে bar(ফাইলের নাম) এবং না foo (ফাইলের বিষয়বস্তু bar)।

grep অতএব কোনও মিল খুঁজে পাচ্ছে না ফলে আউটপুট করার কিছুই নেই।

বিঃদ্রঃ:

  • grepসরাসরি ফাইল অনুসন্ধান করতে পারেন। আপনার ব্যবহারের দরকার নেই find। পাইপ |, বা xargsঅন্য উত্তর হিসাবে পরামর্শ হিসাবে।

নিম্নলিখিত কমান্ড সাইগউইনে কাজ করে:

grep --exclude-dir=* "foo" ./*

উদাহরণ:

DavidPostill@Hal /f/test
$ cat bar
foo

DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo

আরও পড়া


0

আমি মনে করি আপনি এটি চান

find . -name '*' -type f -exec grep foo /dev/null {} \;

আপনি কেবল ফাইলগুলি ডিরেক্টরি বা বিশেষ ফাইলগুলি নয় গ্রেপ করতে চান। / Dev / নাল ফাইলের নামটি গ্রেপ করে। আপনি '-name' * 'থেকে মুক্তি পেতে চাইতে পারেন, তবে আপনি যদি করেন তবে ডট ফাইলগুলি গ্রেপ করা হবে।

আপনি চালাতে পারে

grep -r foo .

আপনার প্রথম কমান্ডটি আমার সমাধানের চেয়ে অনেক ধীর গতির grep --exclude-dir=* "foo" ./*যার দ্বারা অভিন্ন আউটপুট তৈরি হয়।
ডেভিডপস্টিল

grep -r foo .সংক্ষিপ্ত করা যেতে পারেgrep -r foo
ডেভিডপস্টিল

@ ডেভিডপস্টিল কেবলমাত্র জিএনইউ গ্রেপের সাম্প্রতিক সংস্করণগুলিতে। এটি ব্রেনডেড আচরণ আইএমএইচও।
oals

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