(1) এবং গ্রেপ (1) ব্যবহার করে একটি নির্দিষ্ট স্ট্রিং রয়েছে এমন ফাইলগুলি সন্ধান করা হচ্ছে


70

find . -type f -print -exec cat {} \; | grep some string

উপরের কমান্ডটি ফাইলের পাথ প্রিন্ট করে না।

আমি ব্যবহার করছি: Ubuntu, bash 4


গ্রেপ ফিল্টারের কারণে এটি আপনার প্রত্যাশিত ফলাফলগুলি পূরণ করতে পারে না। এটি সম্পর্কে কী:find . -type f -fprint /dev/stderr -exec cat {} \; | grep some string
শিল্পীেক্স

আপনি কী লক্ষ্য অর্জন করতে চান? আউটপুটে আপনি ফাইলগুলি থেকে গ্রেপড স্ট্রিং পাচ্ছেন, আপনি কি সেই ফাইলগুলির পথ চান?
মিরকোব্র্যাঙ্কোভিক

হ্যাঁ আমি ফাইলগুলির পাথ মুদ্রণ করতে চাই যাতে স্ট্রিংটিতে কিছু 'স্ট্রিং' থাকে। @artistoex পরামর্শ সমস্ত ফাইল পাথ প্রিন্ট করে।
এইচ.রাবি

আপনি কেবল ackবর্তমান ডিরেক্টরিতে সমস্ত ফাইলকে গ্রেপ করতে ব্যবহার করতে পারেন , কেবলমাত্র নির্দিষ্ট কিছু ধরণের ফাইলগুলিতে ফিল্টার করে।
জাপ এল্ডারিং

উত্তর:


87

এর কারণ আপনি grepপাঠ্যের একটি স্ট্রিম খাচ্ছেন যা কেবল ফাইল নাম ধারণ করে। যেহেতু আপনি গ্রেপ-তে আর্গুমেন্ট হিসাবে কোনও ফাইলের নাম সরবরাহ করেন নি, কোন ফাইলের সাথে কোনও ম্যাচ লাইন এসেছে তা অনুমান করা যায় না। ব্যবহার xargs:

find . -type f -print | xargs grep "some string"

যেহেতু আপনার কাছে জিএনইউ সন্ধান / এক্সার্গস রয়েছে, তাই ফাইলের নামগুলি পড়ার জন্য এটি জার্গ্সের একটি নিরাপদ উপায়:

find . -type f -print0 | xargs -0 grep "some string"

আপনি যদি কেবল সেই ফাইলের নামগুলি চান যা কোনও মিলের লাইনটি না দেখিয়ে একটি ম্যাচিং লাইন থাকে:

find . -type f -print0 | xargs -0 grep -l "some string"

অনুসন্ধান এবং প্রতিস্থাপনের সাথে আমি কীভাবে উপরের আদেশগুলি একত্রিত করব? হিসাবে হিসাবে, গ্রেপ তারপর সেড?
সিএমসিডিগ্রাগনকাই

1
সন্ধান করুন | sed '...' $(find ... | xargs grep -l ...)
গ্রেপ

107

আমি ব্যবহার করি

grep "some string" . -R

এবং এটি দ্রুত কাজ করছে

PS

আরও জটিল ব্যবহারের ক্ষেত্রে

grep -HiRE "some string|other string" . #H for file printing, i for case-insensitive, R for recursive search, E for regex 

পরম পড়ার জন্য আমি ব্যাখ্যা

grep --help | grep -- -i

17
এবং -nআপনি যদি লাইন নম্বর চান। সরলিকৃত উত্তরের জন্য +1।
চাদ স্কিটার্স

পছন্দ করুন ব্যবহার খোঁজ যেমন সমাধান দেয় না।
আর্চারগোডসন

1
এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত, সত্য বলতে। বর্তমানে নির্বাচিত একটি সম্পূর্ণরূপে অন্য কিছু বিবরণ।

11

আমি প্রায়শই জটিল ফোল্ডার কাঠামোগুলিতে উত্স কোড অনুসন্ধান করি এবং এটি ব্যবহার করে দরকারী বলে মনে করি:

cd /your/folder/
grep -rHino "your string"

যারা পরামিতি সঙ্গে, খোঁজ ব্যবহার না করেই , আমি প্রাপ্ত ফাইল সম্পূর্ণ পাথ এবং লাইন সংখ্যা যে রয়েছে চিহ্নিত স্ট্রিংয়ের

এছাড়া মনে রাখা সহজ কারণ এটি BASH একটি মত আপনার অনুসন্ধানের মাধ্যমে স্প্যানিশ ভাষায় Rhino :)

আমি কীভাবে এটি একটি দ্রুত উদাহরণ দিয়ে কাজ করে তা দেখাব।

আসুন বিড়াল ব্যবহার করে কোনও ফাইলের সামগ্রী প্রদর্শন করুন:

jeeves ~ # cat fw.stop
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

এবং আসুন "iptables -P" স্ট্রিংযুক্ত সমস্ত ফাইলের জন্য পুনরাবৃত্ত অনুসন্ধান করুন:

jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P

আউটপুটটিতে আপনি দেখতে পাচ্ছেন যে আমাদের ফাইলের নাম রয়েছে: হিট সারি: অনুসন্ধানের স্ট্রিং

ব্যবহৃত পরামিতিগুলির আরও বিশদ বিবরণ এখানে:

-r প্রতিটি ডিরেক্টরি অপরেন্ডের জন্য, ডিরেক্টরিটিতে সমস্ত ফাইল পুনরাবৃত্তভাবে পড়ুন এবং প্রক্রিয়া করুন। কমান্ড লাইনে প্রতীকী লিঙ্কগুলি অনুসরণ করুন, তবে পুনরাবৃত্তভাবে মুখোমুখি হওয়া সিমলিঙ্কগুলি এড়িয়ে যান। নোট করুন যে কোনও ফাইল অপারেন্ড না দেওয়া থাকলে গ্রেপ ওয়ার্কিং ডিরেক্টরিটি অনুসন্ধান করে। এটি '--directories = recurse' বিকল্প হিসাবে একই।

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

-n এর ইনপুট ফাইলের মধ্যে 1-ভিত্তিক লাইন নম্বর সহ আউটপুট প্রতিটি লাইন উপসর্গ। (-পোসিক্স দ্বারা নির্দিষ্ট করা হয়।)

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

-অনুষ্ঠানের সাথে মিলে যাওয়া (খালি নয়) খালি অংশগুলি পৃথক আউটপুট লাইনে এই জাতীয় প্রতিটি অংশ রেখে মুদ্রণ করুন। আউটপুট লাইনগুলি ইনপুট হিসাবে একই ডিলিমিটারগুলি ব্যবহার করে, এবং ডিলিমিটারগুলি নাল বাইট হয় যদি -z (--null-data) ব্যবহৃত হয় (অন্যান্য বিকল্প দেখুন)।


1

আমি পছন্দ

| ফাইলটি সন্ধান করুন | গ্রেপ অন্ট ফাইল সন্ধান করুন | ফাইলের পুরো পথ প্রদর্শন করুন

/ -প্রকার এফ-এক্সেক গ্রেপ 'কিছু স্ট্রিং' {} \; -Eexec প্রতিধ্বনি {} \;


0

ফাইল এবং বিষয়বস্তু সন্ধানের জন্য সিলভার অনুসন্ধানকারী একটি খুব দ্রুত এবং সহজ ব্যবহার।

আপনার সমস্যা সমাধানের জন্য সিলভার সন্ধানকারী কমান্ডটি দেখতে এমন হবে ...

ag 'some string' -l

-l কেবল ফাইলের নাম মুদ্রণ করুন যাতে মিল রয়েছে (মিলিত লাইনগুলি মুদ্রণ করবেন না)

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