লিনাক্সে সুনির্দিষ্ট পাঠ্যযুক্ত সমস্ত ফাইল কীভাবে খুঁজে পাব?


5251

আমি নির্দিষ্ট লিখিত স্ট্রিংযুক্ত সমস্ত ফাইলের জন্য আমার সম্পূর্ণ লিনাক্স সিস্টেমটি স্ক্যান করার একটি উপায় অনুসন্ধান করার চেষ্টা করছি। কেবল স্পষ্ট করে বলার জন্য, আমি ফাইলের ভিতরে নয়, ফাইলের মধ্যে টেক্সট খুঁজছি।

আমি কীভাবে এটি করব তা যখন সন্ধান করছিলাম তখন আমি এই সমাধানটি দুইবার পেয়েছিলাম:

find / -type f -exec grep -H 'text-to-find-here' {} \;

তবে এটি কাজ করে না doesn't মনে হয় এটি সিস্টেমের প্রতিটি ফাইল প্রদর্শন করে।

এটি কি এটি করার সঠিক উপায়ের কাছাকাছি? তা না হলে আমার কীভাবে করা উচিত? ফাইলগুলিতে পাঠ্য স্ট্রিংগুলি সন্ধান করার এই ক্ষমতাটি আমি করছি এমন কিছু প্রোগ্রামিং প্রকল্পের জন্য অসাধারণভাবে কার্যকর হবে।


21
মনে রাখবেন যে গ্রেপ .অন্যকেও একক চরিত্রের ওয়াইল্ডকার্ড হিসাবে ব্যাখ্যা করবে । আমার পরামর্শটি সর্বদা fgrep বা egrep ব্যবহার করা।
ওয়াল্টার ট্রস

10
যাইহোক, আপনি প্রায় সেখানে ছিল! শুধু প্রতিস্থাপন -Hসঙ্গে -l(এবং হয়ত grepসঙ্গে fgrep)। নামের নির্দিষ্ট নিদর্শনগুলির সাথে ফাইলগুলি বাদ দিতে আপনি findআরও উন্নত উপায়ে ব্যবহার করবেন । findযদিও এটি ব্যবহার করা শিখতে পারা যায় । শুধু man find
ওয়াল্টার ট্রস

6
find … -exec <cmd> +টাইপ করা সহজ এবং চেয়ে দ্রুত find … -exec <cmd> \;। এটি কেবল তখনই কাজ করে যদি <cmd>কোনও ফাইলের নাম আর্গুমেন্ট গ্রহণ করে। <cmd>পাইথন বা রুবি স্ক্রিপ্টগুলির মতো ধীরে ধীরে শুরু হলে কার্যকর করার সময় সাশ্রয় করা বিশেষত বড় ।
হেগেলো

প্রদত্ত পথে অ-পুনরাবৃত্তভাবে অনুসন্ধান করতে কমান্ডটি হ'ল গ্রেপ - ইনক্লুড = *। Txt -snw "প্যাটার্ন" thepath / *।
স্টাফেন লরেন্ট

@ স্টাফেন লরেন্ট আমি মনে করি আপনি এটি খুব জটিল করছেন। শুধু বলুনgrep "pattern" path/*.txt
ফেডোরকিউ 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

উত্তর:


9501

নিম্নলিখিতগুলি করুন:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -rবা -Rপুনরাবৃত্ত হয়,
  • -n লাইন নম্বর, এবং
  • -w পুরো শব্দটির সাথে মিল রয়েছে।
  • -l (লোয়ার-কেস এল) কেবলমাত্র ফাইলের মিলের ফাইলের নাম দিতে যুক্ত করা যেতে পারে।

এই সাথে --exclude, --include, --exclude-dirপতাকা দক্ষ অনুসন্ধানের জন্য ব্যবহার করা যেতে পারে:

  • এটি কেবলমাত্র সেই ফাইলগুলির মধ্যে অনুসন্ধান করবে যেগুলিতে .c বা .h এক্সটেনশান রয়েছে:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • এটি .o এক্সটেনশন দিয়ে শেষ হওয়া সমস্ত ফাইল সন্ধান বাদ দেবে:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • ডিরেক্টরিগুলির জন্য --exclude-dirপ্যারামিটারের মাধ্যমে কোনও নির্দিষ্ট ডিরেক্টরি (আইস) বাদ দেওয়া সম্ভব । উদাহরণস্বরূপ, এটি ডায়ার dir1 /, dir2 / এবং এর সাথে মেলে * .dst /:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

আপনার মতো প্রায় একই উদ্দেশ্য অর্জনের জন্য এটি আমার পক্ষে খুব ভাল কাজ করে।

আরও বিকল্পের জন্য পরীক্ষা করুন man grep


74
- - অন্তর্ভুক্ত। "গ্রেপ
আরএনডব্লিউ

98
এটি লক্ষণীয়: এটিকে rবিকল্পটি অলস বলে মনে হচ্ছে (প্রথম ডিরেক্টরি পরে থামার চেয়ে গভীরতা প্রথম দিকে সরিয়ে নেওয়া হয়েছে), যদিও Rলোভী (পুরো গাছটি সঠিকভাবে অতিক্রম করবে)।
এলিরান মালকা

5
grep -rnw "স্ট্রিং আমি সন্ধান করছিলাম" আমার যা প্রয়োজন তা করা হয়েছে। ধন্যবাদ!
ভিলিউস

33
দ্রষ্টব্য (বিশেষত newbies জন্য): উপরের কমান্ডে উদ্ধৃতি চিহ্ন গুরুত্বপূর্ণ।
madD7

69
@ ইলিরান মালকা Rএন rউভয় দিকনির্দেশক ডিরেক্টরিগুলি সঠিকভাবে Rঅনুসরণ করবে , তবে প্রতীকী লিঙ্কগুলি অনুসরণ করবে।
bzeaman

1495

আপনি ব্যবহার করতে পারেন grep -ilR:

grep -Ril "text-to-find-here" /
  • i এর অর্থ দাঁড়ান উপেক্ষা (আপনার ক্ষেত্রে .চ্ছিক)।
  • R অর্থ পুনরাবৃত্তি।
  • l "ফাইলের নাম প্রদর্শন করুন, ফলাফলটি নিজেই নয়" stands
  • / আপনার মেশিনের মূল থেকে শুরু করে।

85
আমার অভিজ্ঞতার ভিত্তিতে, তৈরিগুলি -iএটিকে অনেক ধীর করে দেয়, তাই প্রয়োজনে এটি ব্যবহার করবেন না। এটি একটি নির্দিষ্ট দিরে পরীক্ষা করুন এবং তারপরে সাধারণীকরণ করুন। এটি কয়েক মিনিটের মধ্যে শেষ করা উচিত। আমি মনে করি একটি নিয়মিত প্রকাশ এটিকে ধীর করে দেবে। তবে আমার মন্তব্যগুলি অনুমানের উপর ভিত্তি করে, আমি আপনাকে timeলাইনের সামনে এটি পরীক্ষা করার পরামর্শ দিই ।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

4
হ্যাঁ, এটি /*দাঁড়ানো। যাইহোক আমি কেবল এটি পরীক্ষা করেছি এবং লক্ষ্য করেছি যে ঠিক /কাজ করে।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

10
আপনি যদি রেজেক্স ব্যবহার না করে সন্ধান করছেন তবে আপনি বেশিরভাগ সিস্টেমে গ্রেপের জায়গায় fgrep ব্যবহার করতে পারেন।
মার্কেল 976

8
হ্যাঁ @ markle976, মানুষ, grep থেকে আসলে: fgrep is the same as grep -F -> Interpret PATTERN as a list of fixed strings
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

17
আপনি ডিরেক্টরি grep -Ril "text-to-find-here" ~/sites/বা ব্যবহারের পথে / প্রতিস্থাপন করতে পারেন। বর্তমান ডিরেক্টরি জন্যgrep -Ril "text-to-find-here" .
কালো

329

আপনি ack ব্যবহার করতে পারেন । এটি সোর্স কোডের জন্য গ্রেপের মতো । আপনি এটির সাহায্যে আপনার পুরো ফাইল সিস্টেমটি স্ক্যান করতে পারেন।

শুধু কর:

ack 'text-to-find-here'

আপনার মূল ডিরেক্টরিতে।

আপনি নিয়মিত এক্সপ্রেশনও ব্যবহার করতে পারেন , ফাইল টাইপ ইত্যাদি উল্লেখ করতে পারেন


হালনাগাদ

আমি সবেমাত্র সিলভার সন্ধানকারীকে আবিষ্কার করেছি , যা এসির মতো তবে এর চেয়ে 3-5x দ্রুত এবং এমনকি কোনও .gitignoreফাইল থেকে নিদর্শন উপেক্ষা করে ।


57
খুব দরকারী, সহজ এবং দ্রুত। সতর্কতা: "ডেবিয়ান-উত্পন্ন ডিস্ট্রোজে, এসিকে " অ্যাক-গ্রেপ "হিসাবে প্যাকেজ করা হয় কারণ" অ্যাক্ক "ইতিমধ্যে বিদ্যমান" ( পরাগ্রেইগ / ইনস্টল থেকে )। আপনি এই লিনাক্সগুলিতে একটি কানজি কোড রূপান্তরকারী চালিয়ে যেতে পারেন ...
জোসে_জিডি

11
অ্যাক বা অ্যাক-গ্রেপের দুর্দান্ত হাইলাইট রয়েছে তবে যথাযথ ব্যবহৃত হলে পারফরম্যান্সে আরও ভাল হয়
সাওওমির লেনার্ট

14
মনে রাখবেন যে সিলভার অনুসন্ধান এবং প্লেইন ওল গ্রেপ সহ এখানে উল্লিখিত অন্য যে কোনও কিছু থেকে রিগ্রগ্রিপ দ্রুত is প্রমাণের জন্য এই ব্লগ পোস্ট দেখুন ।
রেডন রোসবারো

194

তুমি ব্যবহার করতে পার:

grep -r "string to be searched"  /path/to/dir

rজন্য রিকার্সিভ এবং তাই পথ সুনির্দিষ্ট উপ-ডিরেক্টরির অনুসন্ধান এবং হবে দাঁড়িয়েছে। এটি আপনাকে ফাইলের নাম বলার পাশাপাশি স্ট্রিংয়ের উপস্থিতিতে ফাইলটির লাইনটি মুদ্রণ করবে।

বা আপনি সমস্ত জাভাস্ক্রিপ্ট ফাইল (* .js) এ অনুসন্ধান করার জন্য (যেমন:) চেষ্টা করছেন তার অনুরূপ একটি আদেশ:

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

এটি পাঠ্য উপস্থিত ফাইলগুলিতে লাইনগুলি মুদ্রণ করবে তবে এটি ফাইলের নাম মুদ্রণ করে না।

এই কমান্ডটি ছাড়াও, আমরা এটিও লিখতে পারি: গ্রেপ-আরএন "অনুসন্ধানের জন্য স্ট্রিং" / পাথ / থেকে / ডিরেক্টরি / বা / ফাইল- আরআর: পুনরাবৃত্ত অনুসন্ধানের জন্য অনুসন্ধান করুন : লাইন নম্বর ম্যাচের জন্য প্রদর্শিত হবে


1
সংস্করণ সন্ধানের জন্য থ্যাঙ্কস। আমার গ্রেপ সংস্করণ (এনএএস এর ব্যস্তবক্স) -r বিকল্পটি নেই, আমার সত্যিই অন্য সমাধানের দরকার আছে!
জেসি

3
'অনুসন্ধান' সংস্করণটির জন্য আপনাকে ধন্যবাদ! ' .Js' বা ' .txt', ইত্যাদি দ্বারা ফিল্টার করতে সক্ষম হওয়া এত গুরুত্বপূর্ণ is টাইপ করা সহজ।
পয়গমাইল

স্বীকৃত সংস্করণ থেকে ভাল
গ্রেপ

114

আপনি এটি ব্যবহার করতে পারেন:

grep -inr "Text" folder/to/be/searched/

12
সবচেয়ে সহজ, ভার্বোজ, পুনরাবৃত্ত এবং সংবেদনশীল case থাম্বস আপ।
ফ্রান্সেস্কো ক্যাসুলা

যদি আপনি যোগ করেন -A3 আরও ভাল হয়
আলবেনেক্স

73

প্রদত্ত পাঠ্যযুক্ত ফাইলের নামের তালিকা

প্রথমত, আমি বিশ্বাস করি আপনি এর -Hপরিবর্তে ব্যবহার করেছেন -l। এছাড়াও আপনি অনুসরণ করা উদ্ধৃতি ভিতরে টেক্সট যোগ চেষ্টা করতে পারেন {} \

find / -type f -exec grep -l "text-to-find-here" {} \; 

উদাহরণ

ধরা যাক আপনি আপনার ডিরেক্টরিতে নির্দিষ্ট টেক্সট "অ্যাপাচি লাইসেন্স" ধারণকারী ফাইলগুলি সন্ধান করছেন। এটি নীচে কিছুটা অনুরূপ ফলাফল প্রদর্শন করবে (আপনার ডিরেক্টরি সামগ্রীর উপর ভিত্তি করে আউটপুট ভিন্ন হবে)।

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

কেস সংবেদনশীলতা সরান

এমনকি যদি আপনি "পাঠ্য" বনাম "পাঠ্য" এর মতো মামলাটি ব্যবহার না করেন তবে আপনি কেসটিকে -iউপেক্ষা করার জন্য স্যুইচটি ব্যবহার করতে পারেন । আপনি এখানে আরও বিশদ পড়তে পারেন ।

আশা করি এটি আপনাকে সহায়তা করবে।


2
এই কমান্ডটি যা যা তা করে: এটি কমান্ডের findসমস্ত পাথগুলি পাস করবে grep -l "text-to-find-here" <file found>"। আপনি ফাইলের নামটিতে বিধিনিষেধ যোগ করতে পারেন, উদাহরণস্বরূপ find / -iname "*.txt"কেবল সেই ফাইলগুলিতে অনুসন্ধান করতে যা নামটি শেষ হয়.txt
Mane

1
@ সহায়ক - পাঠকদের কোনও বিভ্রান্তি এড়াতে একটি নমুনা আউটপুট অন্তর্ভুক্ত করেছে।
lkamal

2
@ মেনি এটি সত্যিই দুঃখজনক অবস্থা যে সহায়কিলির মন্তব্যে আপনার চেয়ে বেশি ভোট রয়েছে ... এমনকি যদি তাদের মন্তব্য ২০১৪ এবং আপনার মতামত 2017 হয় যে তাদের মন্তব্যে 6 রয়েছে যখন এটির ঠিক 0 হওয়া উচিত এবং আপনার কেবল একটি (এখন দুটি) ইসন ছিল না আমি বিশ্বাস করতে চাই এমন কিছু নয়।
প্রাইফটান

@ মেনি যা বলা হচ্ছে -inameতা কেস-সংবেদনশীল, যার অর্থ এটি .TXT ফাইলগুলিও খুঁজে পেতে পারে, উদাহরণস্বরূপ, পাশাপাশি TxT এবং TXt এবং আরও।
প্রাইফটান

66

grep( জিএনইউ বা বিএসডি )

আপনি grepবর্তমান ফোল্ডারটি পুনরাবৃত্তভাবে অনুসন্ধান করতে সরঞ্জামটি ব্যবহার করতে পারেন , যেমন:

grep -r "class foo" .

দ্রষ্টব্য: -r- পুনরাবৃত্তভাবে সাব ডিরেক্টরিগুলি অনুসন্ধান করুন।

আপনি নির্দিষ্ট ফাইলগুলির মধ্যে যেমন অনুসন্ধান করতে গ্লোব্বিং সিনট্যাক্স ব্যবহার করতে পারেন:

grep "class foo" **/*.c

দ্রষ্টব্য: গ্লোব্বিং বিকল্প ( **) ব্যবহার করে , এটি নির্দিষ্ট ফাইল বা প্যাটার্নের সাহায্যে সমস্ত ফাইলকে পুনরাবৃত্তভাবে স্ক্যান করে। এই সিনট্যাক্স সক্ষম করতে, সঞ্চালন করুন: shopt -s globstarআপনি **/*.*সমস্ত ফাইলের জন্যও (লুকানো এবং প্রসার ছাড়াই) বা অন্য কোনও প্যাটার্ন ব্যবহার করতে পারেন ।

আপনার তর্কটি যদি খুব দীর্ঘ হয় তবে আপনার অনুসন্ধানটি সঙ্কুচিত করার বিষয়টি বিবেচনা করুন বা এর findপরিবর্তে বাক্য গঠন ব্যবহার করুন :

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

বিকল্পভাবে ব্যবহার ripgrep

ripgrep

আপনি যদি বড় প্রকল্প বা বড় ফাইলগুলিতে কাজ করে থাকেন তবে এর ripgrepপরিবর্তে আপনার ব্যবহার করা উচিত :

rg "class foo" .

গিটহাব প্রকল্প পৃষ্ঠায় ডক্স, ইনস্টলেশন পদক্ষেপ বা উত্স কোড চেকআউট করুন ।

এটি আরও দ্রুত মত অন্য কোন টুল চেয়ে এর গনুহ / বাসদ grep , ucg, ag, sift, ack, ptবা অনুরূপ, যেহেতু এটি উপরে নির্মিত হয় মরচে এর Regex ইঞ্জিন যা সসীম অটোমাটা, SIMD এবং আক্রমনাত্মক আক্ষরিক অপ্টিমাইজেশন খুব দ্রুত অনুসন্ধানের করতে ব্যবহার করে।

এটি .gitignoreফাইলগুলিতে উল্লিখিত নিদর্শনগুলিকে সমর্থন করে , তাই একক একাধিক গ্লোব নিদর্শনগুলির সাথে একক ফাইলের পাথ মেলাতে পারে।


আপনি সাধারণ পরামিতি যেমন ব্যবহার করতে পারেন:

  • -i - সংবেদনশীল অনুসন্ধান।
  • -I - বাইনারি ফাইল উপেক্ষা করুন।
  • -w - পুরো শব্দগুলির জন্য অনুসন্ধান করুন (আংশিক শব্দের মিলের বিপরীতে)।
  • -n - আপনার ম্যাচের লাইনটি দেখান।
  • -C/ --context(উদাঃ -C5) - প্রসঙ্গ বাড়ায়, তাই আপনি আশেপাশের কোডটি দেখেন।
  • --color=auto - মেলে পাঠ্যটি চিহ্নিত করুন।
  • -H - পাঠ্যটি যেখানে পাওয়া যায় সেখানে ফাইলের নাম প্রদর্শন করে।
  • -c- মিলে যাওয়া লাইনের গণনা প্রদর্শন করে। একত্রিত করা যেতে পারে -H

1
আমি বর্ধিত গ্লোববিং দরকারীও বোধ করি। তবে মনে রাখবেন যে যদি সত্যিই বিশাল সংখ্যক ফাইল থাকে তবে আপনি একটি "তর্ক তালিকা খুব দীর্ঘ" ত্রুটি পেতে পারেন। (সরল গ্লোব্বিংও এ জাতীয় ত্রুটির প্রবণতা রয়েছে)।
ইয়ুরি এন।

2
পুরো ফাইল সিস্টেমটি ইনহেল করার জন্য, আরজি প্রায় অন্য যে কোনও সরঞ্জামের চেয়ে কম বেদনাদায়ক হতে পারে।
lk

55

যদি আপনার grepপুনরাবৃত্ত অনুসন্ধানগুলি সমর্থন করে না, আপনি এর findসাথে একত্রিত করতে পারেন xargs:

find / -type f | xargs grep 'text-to-find-here'

ফর্ম্যাটটির চেয়ে মনে রাখা আমি এটিকে সহজ মনে করি find -exec

এটি ফাইলের নাম এবং ম্যাচ করা লাইনের সামগ্রী যেমন আউটপুট দেয়

/home/rob/file:text-to-find-here

আপনি যোগ করতে পারেন এমন toচ্ছিক পতাকা grep:

  • -i - মামলা সংবেদনশীল অনুসন্ধান
  • -l - ম্যাচটি পাওয়া গিয়েছিল কেবলমাত্র সেই ফাইলের আউটপুট
  • -h - কেবল মিলিত লাইনটি আউটপুট করুন (ফাইলের নাম নয়)

3
কিছু না পেলে grep 'text-to-find-here'এটি ফাইল নাম ছাড়াই সমান find। এটি স্তব্ধ হয়ে যাবে এবং ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করবে! --no-run-if-emptyবিকল্প হিসাবে যুক্ত করুন xargs
হেগেলো

3
ফাইল এবং ডিরেক্টরি নামের ফাঁকা স্থান (অক্ষরগুলি যা পৃথক হিসাবে ব্যাখ্যা করে এমন অক্ষর) অন্তর্ভুক্ত হিসাবে অনুসন্ধান এবং xargs এর এই সংমিশ্রণটি উদ্দেশ্য হিসাবে কাজ করে না। ব্যবহার find … -exec grep … +। আপনি যদি জার্গার্সের সাথে একসাথে সন্ধানটি ব্যবহার করার জন্য জিদ করেন, -print0এবং ব্যবহার করুন -0
হেগেলো

43
grep -insr "pattern" *
  • i: PATTERN এবং ইনপুট ফাইল উভয় ক্ষেত্রে কেস পার্থক্য উপেক্ষা করুন।
  • n: আউটপুট প্রতিটি লাইন এর ইনপুট ফাইলের মধ্যে 1-ভিত্তিক লাইন নম্বর সঙ্গে উপসর্গ।
  • s: অস্তিত্বহীন বা অপঠনযোগ্য ফাইল সম্পর্কে ত্রুটি বার্তাগুলি দমন করে।
  • r: প্রতিটি ডিরেক্টরিতে সমস্ত ফাইল পুনরাবৃত্তভাবে পড়ুন।

3
আপনার উত্তর কীভাবে অন্যান্য উত্তরের উপরে উন্নতি করতে পারে বা কীভাবে এটি তাদের থেকে যথেষ্ট আলাদা?
আমোস এম কার্পেন্টার

মনে রাখা খুব জটিল নয়, সমস্ত নিদর্শনগুলি আবরণ করবে (কেস-সংবেদনশীলতা -> বন্ধ, ফাইল-নাম এবং লাইন নম্বর অন্তর্ভুক্ত করবে এবং পুনরাবৃত্তভাবে অনুসন্ধান করবে ইত্যাদি) এবং শেষে "*" ব্যবহার করে সমস্ত ডিরেক্টরি অনুসন্ধান করা হবে (কোনও নির্দিষ্ট করার প্রয়োজন নেই) পাথ বা ডিরেক্টরি নাম)।
এনফিনিট

দুঃখিত, আমার পরিষ্কার হওয়া উচিত ছিল: আপনি যদি নিজের উত্তরটিতে এই ব্যাখ্যাটি অন্তর্ভুক্ত করতে পারেন তবে দুর্দান্ত হবে। এটি যেমন দাঁড়িয়েছে, বিশেষত ইতিমধ্যে আরও অনেক অনুরূপ উত্তর সহ, এটি স্বীকৃত উত্তর বা উত্তোলিত উত্তরগুলির মধ্যে একটির দ্বারা চেষ্টা করে কী লাভ হবে তা এইরকম একটি সংক্ষিপ্ত উত্তর থেকে পাওয়া শক্ত ।
আমোস এম কার্পেন্টার

6
@ AmosM.Carpenter আমি এই উত্তরটির সম্পর্কে একটি বিষয় পছন্দ করি তা দমন করা যুক্তিটি নির্দেশ করে যা শব্দের ফিল্টারে সহায়তা করতে পারে যা আমাদের প্রকৃত ফলাফল পাওয়ার পক্ষে কোনও বিষয় নয়। কিছু "ফাইল" তে "ফাংশন প্রয়োগ করা হয়নি", "অবৈধ যুক্তি", "রিসোর্স অনুপলব্ধ", ইত্যাদি ইত্যাদি গ্রেপ মুদ্রণের ত্রুটিগুলি প্রিন্ট করে।
leetNightshade

@ লিটনাইটশেড: আমি ধরে নিচ্ছি আপনি আমার কাছে আপনার মন্তব্যটি সম্বোধন করছেন কারণ আমি বিরল মূল পোস্টে ব্যাখ্যা চেয়েছি। অনুগ্রহ করে আমার আগের মন্তব্যে ফ্যাবিওর দুর্দান্ত সংশোধন দেখুন ।
আমোস এম কার্পেন্টার

39

দ্য সিলভারসিয়ার নামে একটি নতুন ইউটিলিটি রয়েছে

sudo apt install silversearcher-ag

এটি গিট এবং অন্যান্য ভিসিএসের সাথে ঘনিষ্ঠভাবে কাজ করে। সুতরাং আপনি .git এ কিছুই পাবেন না বা অন্য কোনও ডিরেক্টরিতে ।

আপনি সহজভাবে ব্যবহার করতে পারেন

ag "Search query"

এবং এটি আপনার জন্য কাজটি করবে!


35

লিনাক্সে সুনির্দিষ্ট পাঠ্যযুক্ত সমস্ত ফাইল কীভাবে খুঁজে পাব? (...)

আমি এই সমাধানটি দুইবার পেয়েছি:

find / -type f -exec grep -H 'text-to-find-here' {} \;


ব্যবহার যদি খোঁজ আপনার উদাহরণে মত, ভাল যোগ -s( --no-messages) এর grep, এবং 2>/dev/nullএর এড়ানোর প্রচুর কমান্ডের শেষে অনুমতি অস্বীকার বার্তা দ্বারা জারি grepএবং find:

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

খোঁজ ফাইল অনুসন্ধানের জন্য আদর্শ টুল - প্ল্যাটফর্মের মত ইউনিক্স অন - যখন নির্দিষ্ট টেক্সট খুঁজছেন, grep সঙ্গে মিলিত। খোঁজ কমান্ড প্রায়ই সঙ্গে মিলিত হয় xargs , উপায় দ্বারা।

একই উদ্দেশ্যে দ্রুত এবং সহজ সরঞ্জাম বিদ্যমান - নীচে দেখুন। তারা আপনার প্ল্যাটফর্মে উপলব্ধ থাকলে তাদের আরও ভাল চেষ্টা করুন :

দ্রুত এবং সহজ বিকল্প

রিপগ্রিপ - আশেপাশে দ্রুততম অনুসন্ধানের সরঞ্জাম:

rg 'text-to-find-here' / -l

সিলভার সন্ধানকারী :

ag 'text-to-find-here' / -l

এসকি :

ack 'text-to-find-here' / -l

দ্রষ্টব্য: আপনি 2>/dev/nullঅনেকগুলি ত্রুটি বার্তা আড়াল করতে এই কমান্ডগুলিতেও যুক্ত করতে পারেন ।


সতর্কতা : আপনি যদি এটিকে সত্যিই এড়াতে না পারেন তবে দীর্ঘ এবং অদক্ষ অনুসন্ধান এড়ানোর জন্য '/' (মূল ডিরেক্টরি) থেকে অনুসন্ধান করবেন না! সুতরাং উপরের উদাহরণগুলিতে আপনি ' / ' কে একটি উপ-ডিরেক্টরি নামের দ্বারা প্রতিস্থাপন করতে হবে , উদাহরণস্বরূপ "/ হোম" আপনি কোথায় অনুসন্ধান করতে চান তার উপর নির্ভর করে ...


'ইউনিক্সের মতো প্ল্যাটফর্মগুলিতে সুনির্দিষ্ট পাঠ্যযুক্ত ফাইলগুলি অনুসন্ধানের জন্য স্ট্যান্ডার্ড হাতিয়ার' আমার কাছে বরং অস্পষ্ট মনে হয়। এমনকি পুনরাবৃত্তির পাশাপাশি grep findপাঠ্যের জন্য সরাসরি ফাইলগুলির অভ্যন্তর অনুসন্ধান করে না। এবং সম্ভবত সেই অতিরিক্ত সরঞ্জামগুলি কিছু তবে পুরানো টাইমারদের জন্য দরকারী এবং যারা হুদা হিসাবে অভ্যস্ত তারা উদাহরণস্বরূপ grepকোনও সময় দেয় না (ভাল আমি অবশ্যই করব না)। তারা যদিও অকেজো তা বলছেন না।
প্রাইফটান

".... নির্দিষ্ট পাঠ্য রয়েছে ...": বাক্যটির এই অংশটি সঠিক ছিল না (কারণ এটি অনুসন্ধানের এই অংশটির সাথে নিজেকে সন্ধান করে না)। সম্পাদনা করা হয়েছে। ধন্যবাদ।
বুলডজি

সাহায্য করতে পেরে খুশি! একটি খুব খুব দ্রুত নজরে অন্য একমাত্র জিনিস শব্দ পরিবর্তন করা হয় ফোল্ডারের জন্য ডিরেক্টরির কিন্তু আমি জানি যে আমার এক ধর্মযুদ্ধ আমি পুরোপুরি কখনো জিতবেন না আছে। যদিও
হাল ছাড়ছেন

"ফোল্ডার" এর পরিবর্তে "ডিরেক্টরি" কেন নয়, তবে কেন? আপনার "ক্রুসেড" ভাগ করুন!
বুলডুজী

আমি পরিবর্তে ব্যবহার ডিরেক্টরি বলছি! উল্লেখ করে: আপনি একটি সাব-ফোল্ডার নাম দ্বারা '/' এর চেয়ে ভাল প্রতিস্থাপন করতে পারেন এবং এটি আমার একটি পোষা প্রাণীর উঁকি দেওয়া .. esp যেহেতু উইন্ডোজও এটি 'ডিরেক্টরি' বলে অভিহিত করত। আহ..আমাকে তুমি পেয়েছিলে। কেন? ওয়েল কারণ এটি বলা হয়। এটিকে ফাইল সিস্টেম পর্যায়েও বলা হয়। এবং এটি এইভাবে দেখুন: এটি কি কখনও ডস (ডস জন্য) বলা হয়েছিল fol? না অবশ্যই না; এটি বলা হয়েছিল dir(এবং আমি এখনও এটি বিশ্বাস করি)। ফোল্ডারটি ব্যবহারকারী বন্ধুত্বের বিষয় হিসাবে বিবেচিত (যদিও আমি মনে করি) এটি কম 'উন্নত' ব্যবহারকারীদের জন্য কমিয়ে দিচ্ছে?
প্রাইফটান

29

চেষ্টা করুন:

find . -name "*.txt" | xargs grep -i "text_pattern"

5
এটি আসলে কখনই xargsএরকম ব্যবহার করবেন না তার একটি প্রধান উদাহরণ .. এটি বিবেচনা করুন। echo "file bar.txt has bar" > bar.txt; echo "file foo bar.txt has foo bar" > "foo bar.txt"; echo "You should never see this foo" > foo; find . -name "*.txt" | xargs grep -i foo # ./foo:You should never see this fooxargsএখানে ভুল ফাইল সঙ্গে মানানসই এবং অভিপ্রেত ফাইল মেলেনি। হয় একটি ব্যবহার করুন find .. -print0 | xargs -0 ...তবে এটি পাইপের অকেজো ব্যবহার বা এর চেয়ে ভালfind ... -exec grep ... {} +
শালম্ব

29

pwdনীচের দিকে পুনরাবৃত্তি করে আপনি যে কোনও ডিরেক্টরিতে রয়েছেন তা অনুসন্ধান করতে ব্যবহার করুন

grep -rnw `pwd` -e "pattern"

আপডেট আপনি যে গ্রেপ ব্যবহার করছেন তার সংস্করণ অনুসারে আপনি বাদ দিতে পারেন pwd। নতুন সংস্করণগুলিতে .গ্রেপের জন্য ডিফল্ট কেস বলে মনে হয় যদি কোনও ডিরেক্টরি এভাবে দেওয়া না থাকে:

grep -rnw -e "pattern"

অথবা

grep -rnw "pattern"

উপরের মত একই কাজ করবে!


3
এটি ব্যবহার pwdকরা মোটেই প্রয়োজন হয় না, কারণ এটি ডিফল্ট। grep -rnw "pattern"আল্লাহই যথেষ্ট।
ফেডোরকি 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

এবং বাস্তবে grep -rnwএকইরকম একই উত্তর দেওয়া হয়েছিল তিন বছর আগে, আমি দেখতে পাচ্ছি না যে এই উত্তরটি কীভাবে মূল্য যুক্ত করছে adding
ফেডোরকুই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

নির্বাচিত উত্তরটি ডিফল্ট প্যাটার্নটি প্রদর্শন করে না এবং 5 জন লোক এটি কার্যকর বলে মনে হয়েছে
মহাতমানিচ

"ডিফল্ট প্যাটার্ন" বলতে কী বোঝ? গৃহীত উত্তরে grep -rnw '/path/to/somewhere/' -e "pattern"যা আপনার কাছে রয়েছে তা অন্তর্ভুক্ত রয়েছে । ২.৩ এম পরিদর্শন শেষে 5 টি ভোটের অর্থ এর বেশি নয়।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

আমি সম্মত হই :-) মূল উত্তরে আমি যা হারিয়েছিলাম তা হ'ল ব্যবহারের ক্ষেত্রে আপনাকে কোনও পথই দিতে হবে না বা বর্তমান ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করতে হবে যা স্বীকৃত উত্তরে প্রতিফলিত হয় না। এইভাবে আরও গভীর খননের জন্য গ্রেপ সম্পর্কে একটি ভাল শিক্ষার অভিজ্ঞতা ছিল।
মহাতমানিচ

19

grep আমরা কোনও স্ট্রিং না খুঁজলেও ব্যবহার করা যেতে পারে।

সোজা চলছে,

grep -RIl "" .

সমস্ত পাঠ্য ফাইলের পাথ মুদ্রণ করবে, যেমন কেবল মুদ্রণযোগ্য অক্ষর রয়েছে।


2
নিখুঁত lsবা find(পুনরাবৃত্তকারীদের জন্য) ব্যবহার করার চেয়ে এটি কীভাবে ভাল তা আমি দেখতে পাচ্ছি না
ফেডোরকুই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

17

এখানে অনুসন্ধানের জন্য ব্যবহৃত কয়েকটি আদেশের তালিকা রয়েছে।

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "word-1|word-2” directory-path

egrep -w -R "word-1|word-2” directory-path

5
এটি বিদ্যমান উত্তরের সাথে কী যুক্ত করছে?
ফেডোরকি 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

@ ফেডরকিই egrepএর সমতুল্য grep -Eএবং এর অর্থ --extended-regexpআপনি এখানে বিশদটি
omehakanbilici

17

সিলভার অনুসন্ধানক একটি দুর্দান্ত সরঞ্জাম, তবে রিপগ্রিপ আরও ভাল হতে পারে।

এটি লিনাক্স, ম্যাক এবং উইন্ডোজে কাজ করে এবং কয়েক মাস আগে হ্যাকার নিউজে লেখা হয়েছিল (এটির একটি লিঙ্ক রয়েছে অ্যান্ড্রু গ্যালান্টের ব্লগে যার একটি গিটহাবের লিঙ্ক রয়েছে):

রিপগ্রিপ - একটি নতুন কমান্ড লাইন অনুসন্ধান সরঞ্জাম


15
find /path -type f -exec grep -l "string" {} \;

মন্তব্য থেকে ব্যাখ্যা

সন্ধান একটি হ'ল কমান্ড যা আপনাকে প্রদত্ত পথের উপ-ডিরেক্টরিতে ফাইল এবং অন্যান্য অবজেক্টের মতো ডিরেক্টরি এবং লিঙ্কগুলি সন্ধান করতে দেয়। যদি আপনি কোনও মাস্ক নির্দিষ্ট না করেন যা ফাইলের নামগুলি পূরণ করতে পারে তবে এটি সমস্ত ডিরেক্টরি অবজেক্টকে গণ্য করে।

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename

15

চেষ্টা করুন:

find / -type f -exec grep -H 'text-to-find-here' {} \;

যা সমস্ত ফাইল সিস্টেম অনুসন্ধান করবে, কারণ / মূল ফোল্ডার।

হোম ফোল্ডার ব্যবহারের জন্য:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

বর্তমান ফোল্ডার ব্যবহারের জন্য:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;

সম্ভবত ফোল্ডারগুলির পার্থক্য সম্পর্কিত বিশদটি অনেকের কাছে সুস্পষ্ট ... তবে নতুনদের জন্য এটি খুব সহায়ক। +1
নীলন

1
এটি বিদ্যমান উত্তরের সাথে কী যুক্ত করছে?
ফেডোরকি 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

এটিকে আমার ক্রুসেড বলুন তবে শব্দটি 'ডিরেক্টরি'। এটি উইন্ডোজ নয় (যা যাইহোক - প্রাক 9x পূর্ববর্তী সময়ে 'ডিরেক্টরি' ব্যবহার করতে ব্যবহৃত হয়)। দয়া করে 'ফোল্ডার' বলা বন্ধ করুন। আপনার শেষ কমান্ডের জন্য আপনার এমনকি '/' শুধু এফওয়াইআইয়ের দরকার নেই।
প্রাইফটান

15

আশা করি এটি সহায়তার ...

সম্প্রসারিত grepএকটু উদাহরণস্বরূপ আউটপুটে আরও তথ্য দিতে চাই, যেখানে টেক্সট নিম্নরূপ কাজ করা যেতে পারে ফাইল লাইন নম্বর পেতে:

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

ফাইল ফাইলটি কী তা আপনার যদি ধারণা থাকে তবে এই ক্ষেত্রে .pasবা .dfmফাইলগুলিতে অনুসন্ধানের জন্য ফাইল প্রকারের এক্সটেনশানগুলি নির্দিষ্ট করে আপনার অনুসন্ধানকে সঙ্কুচিত করতে পারেন :

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

বিকল্পগুলির সংক্ষিপ্ত ব্যাখ্যা:

  1. .মধ্যে findবর্তমান ডিরেক্টরি থেকে নির্দিষ্ট করে।
  2. -name" *.*": সমস্ত ফাইলের জন্য (-নাম " *.pas" -o -name " *.dfm"): কেবল *.pasওআর *.dfmফাইলগুলি, বা এর সাথে নির্দিষ্ট-o
  3. -type f আপনি ফাইল সন্ধান করছেন তা নির্দিষ্ট করে
  4. -print0এবং --nullওপারে |(নল) গুরুত্বপূর্ণ বেশী, থেকে ফাইলের নাম ক্ষণস্থায়ী findথেকে grepএমবেড xargs, ফাইলের নামের মধ্যে ব্যবধান সহ ফাইলের নামের পাশ ফলে, এক স্ট্রিং হিসেবে পাথ ও ফাইলের নাম চিকিত্সা, grep যার ফলে এবং এটি প্রতিটি স্পেসে ভাঙবে না।

-name '*.*'আপনি যা বলছেন তা নয়; এটি 'ফাইল' নামক কোনও ফাইল বাছাই করতে পারে না কারণ প্যাটার্নটি (কোনও .ext) এর সমান হয় না; *যাইহোক (ভাল। ফাইল একপাশে)। তবে আরেকটি জিনিস আছে: আপনি যদি সমস্ত ফাইল চান তবে প্রথমে কোনও ফাইলের নাম নির্দিষ্ট করে কেন বিরক্ত করবেন? অন্য কোনও মন্তব্য নেই - তবে এটি জেনে ভালো লাগল যে এখনও এমন লোকেরা রয়েছেন যারা এমএস পরিভাষা 'ফোল্ডার' ব্যবহার করেন না (যা সত্যিই যথেষ্ট বলার পরেও আমি যুক্ত করব না তবে আপনি যে সামান্য ভুল বক্তব্য দিয়েছেন তা আমি উল্লেখ করতে চেয়েছিলাম) ফাইলের নাম সহ - পাশাপাশি 'সকলের ক্ষেত্রে অপ্রয়োজনীয়তা / অকেজোতা')।
প্রাইফটান

15

একটি সাধারণ findকাজ করতে পারে। আপনার ~/.bashrcফাইলটিতে এটির নাম দিন :

alias ffind find / -type f | xargs grep

একটি নতুন টার্মিনাল শুরু করুন এবং ইস্যু করুন:

ffind 'text-to-find-here'

14

আমি পাইথন স্ক্রিপ্ট লিখেছিলাম যা এরকম কিছু করে। এই স্ক্রিপ্টটি এভাবে ব্যবহার করা উচিত।

./sniff.py path pattern_to_search [file_pattern]

প্রথম যুক্তি,, pathহ'ল ডিরেক্টরিটি যা আমরা পুনরাবৃত্তভাবে অনুসন্ধান করব। দ্বিতীয় যুক্তি, pattern_to_searchহ'ল একটি নিয়মিত প্রকাশ যা আমরা কোনও ফাইলে অনুসন্ধান করতে চাই। পাইথন re লাইব্রেরিতে আমরা নিয়মিত অভিব্যক্তি বিন্যাসটি সংজ্ঞায়িত করি । এই স্ক্রিপ্টে, .নতুন লাইনের সাথেও মেলে।

তৃতীয় যুক্তি file_pattern, isচ্ছিক। এটি অন্য নিয়মিত অভিব্যক্তি যা কোনও ফাইলের নামে কাজ করে। এই নিয়মিত প্রকাশের সাথে মেলে কেবল সেই ফাইলগুলি বিবেচনা করা হবে।

উদাহরণস্বরূপ, যদি আমি এক্সটেনশানের সঙ্গে পাইথন ফাইল অনুসন্ধান করতে চান pyধারণকারী Pool(শব্দ দ্বারা অনুসরণ Adaptor, আমি নিম্নোক্ত কাজ,

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

এবং ভয়েলা, এটি ম্যাচটি পাওয়া যায় এমন ম্যাচযুক্ত ফাইল এবং লাইন নম্বরটির পথ তৈরি করে। যদি একাধিক মিল খুঁজে পাওয়া যায়, তবে প্রতিটি লাইন নম্বর ফাইলের সাথে সংযুক্ত করা হবে।


14

আপনি যদি কঠোরভাবে ব্যবহার করতে চান findতবে ব্যবহার করুন find + grep:

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

ধাপ:

findফাইলগুলি অনুসন্ধান করতে ব্যবহার করুন ,
2.তখন grepতাদের সকলের উপর মৃত্যুদন্ড কার্যকর করুন।

এটি আপনাকে findফাইলগুলি সন্ধানের শক্তি দিতে পারে।

  • -name Patternআপনি যদি grepকিছু নির্দিষ্ট ফাইল চান তবে ব্যবহার করুন :

    find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

আপনি এটির সাথে খেলতে পারেন এবং findআপনার ফাইল অনুসন্ধানকে উন্নত করতে বা সংকীর্ণ করতে বিভিন্ন বিকল্প ব্যবহার করতে পারেন।


পার্থক্য কি? এটি ফাইলের ফাঁকে ফাঁকে ফাঁকে কাজ করবে?
পিটার মর্টেনসেন

13

ব্যবহার করুন:

grep -c Your_Pattern *

এটি বর্তমান ডিরেক্টরিতে প্রতিটি ফাইলের মধ্যে আপনার প্যাটার্নের কয়টি অনুলিপি রয়েছে তা প্রতিবেদন করবে।


13

এটি অর্জনের জন্য গ্রেপ আপনার ভাল বন্ধু।

grep -r <text_fo_find> <directory>

আপনি যদি পাঠ্যের ক্ষেত্রে সন্ধানের ক্ষেত্রে যত্ন না পান তবে ব্যবহার করুন:

grep -ir <text_to_find> <directory>

আমার ক্ষেত্রে এটি দেখে মনে হচ্ছে এটি সর্বত্র অনুসন্ধান করে এমনকি আমি ডিরেক্টরিটি নির্দিষ্ট করে
দিলেও

@ পাঠ্রস সম্ভবত পুনরাবৃত্তি সক্ষম এবং আপনি যে ডিরেক্টরিটি নির্দিষ্ট করেছেন তা করতে হবে do আরেকটি উপায়ে পুনরাবৃত্তি করা জিনিসগুলিকে পরিবর্তিত করে।
প্রাইফটান

@ পাথ্রস ওহ এবং -অনুসন্ধান স্ট্রিংয়ে কোনও কিছু থাকলে আপনি প্রথমে গ্রেপ এ প্রবেশ করতে চাইবেন --; অন্যথায় আকর্ষণীয় পার্শ্ব প্রতিক্রিয়া হতে পারে!
প্রাইফটান

13

আমি কীভাবে সাধারণ গ্রাপকে 'আরএল' দিয়ে তৈরি করে তা দেখে আমি মুগ্ধ :

grep -rl 'pattern_to_find' /path/where/to/find

-r to recursively find a file / directory inside directories..
-l to list files matching the 'pattern'

পাঠ্য অনুসারে ফাইলের নাম দেখতে প্যাটার্নটি পাওয়া গেলে 'l' ছাড়াই '-r' ব্যবহার করুন !

grep -r 'pattern_to_find' /path/where/to/find

এটি ঠিক নিখুঁত কাজ করে ...


এটি গিট বাশ (উইন্ডোজ) এও কাজ করে ।
পিটার মর্টেনসেন

তবে এটি বোঝায় যে প্রতিটি ফাইল অবশ্যই অনুসন্ধান করবে (ফাইলের নাম বা ফাইলের এক্সটেনশন স্তরের কোনও ফিল্টার নয় .txt)। নাকি তা করার কোনও উপায় আছে?
পিটার মর্টেনসেন

12

স্ট্রিং এবং আউটপুট অনুসন্ধানের জন্য অনুসন্ধান স্ট্রিংয়ের সাথে কেবল সেই লাইনটি অনুসন্ধান করতে:

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

উদাহরণ:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

অনুসন্ধানের স্ট্রিং সহ ফাইলের নাম প্রদর্শন করতে:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

উদাহরণ:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;

1
আমি ব্যবহারের তুলনায় কেবল খারাপ দিকটি দেখছি find … -exec grep 'str' {} \;(যদি আপনাকে কিছুটা ব্যবহার করতে findহয়)।
পিএইচকে

1
এটি যদি খুব সহজেই findফাঁকা হয়ে যায় তবে যদি কোনও ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকা ফাইলগুলি খুঁজে পাওয়া যায় .. তবে আপনি greppingভুল ফাইল এবং / অথবা সঠিক ফাইলগুলি পুরোপুরি হারিয়ে যেতে পারেন। শুধু ব্যবহার find ... -exec grep ...যদি আপনি ব্যবহার করার একটা ঝোঁক প্রয়োজন আছে findএকটি .. কিন্তু এক্ষেত্রে grep -r ...যথেষ্ট।
শালম্ব

1
তারপরে গ্রেপের ফলাফলের উপর একটি লুপ ব্যবহার করার কী আছে? এটি অযথা জটিল হয়ে যায়।
ফেডোরকি 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

12

এমন একটি ackসরঞ্জাম রয়েছে যা আপনি যা খুঁজছেন ঠিক তা করবে।

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

-iসংবেদনশীল অনুসন্ধানের জন্য আপনি উপেক্ষা করতে পারেন


2
এটি বিদ্যমান উত্তরের সাথে কী যুক্ত করছে? এটি ইতিমধ্যে তিন বছর আগে পরামর্শ দেওয়া হয়েছিল।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

1
@ ফেডোরকুই ১) পাইপিং নেই! ২) নিয়মিত এক্সপ্রেশন ব্যবহার করুন ৩) সন্ধানের পরে সম্পাদনার জন্য দরকারী লাইন নম্বর, আপেক্ষিক পথের সাথে ফাইলের নাম, হাইলাইটেড পাঠ্য ইত্যাদি পান যেমন "vim + লিনেনো পাথ / file.cpp" আপনাকে আগ্রহের কোন লাইনে ঠিকই পেয়ে যাবে। "Ack অন্তর্ভুক্ত \ | এইচপিপি" কমান্ডের আউটপুটটি দেখুন যা আমার অনুসন্ধান ফোল্ডার এবং সাবফোল্ডারগুলির অধীনে "অন্তর্ভুক্ত" বা "এইচপিপি" কীওয়ার্ডগুলি অনুসন্ধান করে। আমি আশা করি বিষয়টি পরিষ্কার হয়ে গেছে। এখানে নমুনা আউটপুট (সহজ পাঠ্য সহ কীওয়ার্ডের হাইলাইটগুলি প্রদর্শন করা যায় না) প্রক্রিয়া / চাইল্ড এইচপি 11: বুস্ট / প্রসেস / চাইল্ড এইচপি প্রক্রিয়া / সমস্ত এইচপি 21: # অন্তর্ভুক্ত <বুস্ট / প্রসেস / এক্সিকিউটিট hpp>
পাল

12

পূর্ববর্তী সমস্ত উত্তর গ্রেপ এবং সন্ধান করার পরামর্শ দেয়। তবে আরেকটি উপায় আছে: মিডনাইট কমান্ডার ব্যবহার করুন

এটি একটি বিনামূল্যে ইউটিলিটি (30 বছর বয়সী, সময় দ্বারা প্রমাণিত) যা জিইউআই না হয়ে দৃশ্যমান without এটিতে প্রচুর ফাংশন রয়েছে এবং ফাইলগুলি অনুসন্ধান করা তার মধ্যে একটি।


রেঞ্জার একই
ধারণাটিতে থাকবে

11

নীচের আদেশটি এই পদ্ধতির জন্য ভাল কাজ করবে:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;

2
ব্যবহার করার findপরে আর grep -rকী লাভ? তারা একই জন্য বোঝানো হয়, তাই এটি অনর্থক।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

ওহ !! সংশোধন করা হয়েছে, প্রকৃতপক্ষে ফিল্টার করা ফাইলগুলিতে গ্রেপ চালানোর জন্য অনুসন্ধান করুন এবং সমস্ত নয়, ধন্যবাদ
প্রদীপ গোস্বামী

2
তবুও, এটি কোনও অর্থ দেয় না, আপনি ফিল্টার করতে পারেন find
ফেডোরকুই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

11

ঝামেলা এড়ান এবং এসি-গ্রেপ ইনস্টল করুন। এটি প্রচুর অনুমতি এবং উদ্ধৃতি সংক্রান্ত সমস্যাগুলি সরিয়ে দেয়।

apt-get install ack-grep

তারপরে আপনি যে ডিরেক্টরিটি অনুসন্ধান করতে চান তাতে যান এবং নীচের কমান্ডটি চালান run

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