প্রদত্ত পাঠ্যযুক্ত ফাইলগুলি সন্ধান করুন


153

বাশে আমি .php|.html|.jsকেস-সংবেদনশীল স্ট্রিংযুক্ত প্রতিটি ধরণের ফাইলের জন্য ফাইলের নাম (এবং ফাইলের পথে) ফেরত দিতে চাই"document.cookie" | "setcookie"

আমি যে কিভাবে করতে হবে?


4
আপনি কি শুধু গ্রিপ ব্যবহার বিবেচনা করেছেন? cyberciti.biz/faq/grep-in-bash
টেরেন্স

এই শিরোনাম মোটামুটি বিভ্রান্তিকর। "একটি-দেওয়া-
জোশ সি

উত্তর:


212
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .

rপতাকা (অনুসন্ধান সাবডিরেক্টরি) যাও recursively অনুসন্ধান মানে। iপতাকা ক্ষেত্রে অসংবেদী মানে।

আপনি যদি কেবল ফাইলের নামগুলি l(ছোট হাতের Lপতাকা) পতাকাটি যুক্ত করতে চান :

egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .

এটি আমার পক্ষে কাজ করে না বলে মনে হয়েছে (কমপক্ষে ম্যাকের উপরে নয়) .... কেবল ঝুলছে ... egrep -lir --incolve = * "রেপো" উদাহরণ: সতর্কতা: স্টিডিনের পুনরাবৃত্তি অনুসন্ধান
ডিন হিলার

13
আপনি অনুসন্ধানের পথটি যুক্ত করতে ভুলে গেছেন। পথটি '।' উপরের উদাহরণে। আপনার ক্ষেত্রে, স্ক্রিপ্ট স্টিডিনে অনুসন্ধানের জন্য ইনপুটটির জন্য অপেক্ষা করছে। চেষ্টা করুন: egrep -lir --inc समावेश = * "রেপো" / (বা অন্য কোনও পথ)
লোডরনার

1
grep -E ... >egrep ...
আমান

আমি grep: (error|fail): No such file or directoryউবুন্টু ডেস্কটপ 16 এ ত্রুটি পেয়েছি ; কোন ইঙ্গিত?
নাম জি ভিইউ

আমার এই কাজটি করার জন্য, আমাকে * দিয়ে sk এড়িয়ে চলতে হয়েছিল \ তাই আমার কাছে রয়েছে--include=\*.{php,html,js}
মেহরাদ মাহমুদিয়ান

53

এরকম কিছু চেষ্টা করুন grep -r -n -i --include="*.html *.php *.js" searchstrinhere .

-iএটি ঘটনাটিকে সংবেদনহীন করে তোলে

.শেষ মানে আপনি আপনার বর্তমান ডিরেক্টরি থেকে শুরু করতে চান, এই যে কোনো ডিরেক্টরির প্রতিস্থাপিত যেতে পারে।

-rমানে recursively এই না, ডান ডিরেক্টরি গাছটা

-nমিলের জন্য লাইন সংখ্যা ছাপে।

--includeআপনাকে ফাইলের নাম, এক্সটেনশন যোগ করতে দেয়। ওয়াইল্ডকার্ড গ্রহণ করা হয়েছে

আরও তথ্যের জন্য দেখুন: http://www.gnu.org/software/grep/


4
অথবা সম্ভবত -lবিকল্পটি ব্যবহার করুন (কেবলমাত্র ফাইলের সাথে মেলে এমন ফাইলগুলি মুদ্রণ করুন)-n
গ্লেন জ্যাকম্যান

15

findতাদের এবং grepস্ট্রিংয়ের জন্য:

এটি নিয়মিত প্রকাশের জন্য আপনার 3 প্রকারের সমস্ত ফাইল / স্টার্টিং / পাথ এবং গ্রেপের সন্ধান করবে '(document\.cookie|setcookie)'। কেবল পাঠযোগ্যতার জন্য ব্যাকস্ল্যাশ সহ 2 টি লাইনের বিভক্ত করুন ...

find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
 xargs egrep -i '(document\.cookie|setcookie)'

1
-exec grep -l 'sth' {} \;
সন্ধানের

ধন্যবাদ @ # egrep -ir --include=file.foo "(foo|bar)" /dirমিচেল বারকোভস্কি ~ 500 গিগাবাইট ওয়েইগ ডিরেক্টরিতে এই ভাবে দ্রুত 5 বা 8 বারের বেশি ।
Qh0stM4N

9

grepবা এ্যাকের জন্য সম্ভবত একটি নিখুঁত কাজের মতো মনে হচ্ছে

বা এই দুর্দান্ত নির্মাণ:

find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;

-exec grep...আমার xargsপদ্ধতির চেয়ে +1 ব্যবহার করা আরও ভাল কারণ এটি ফাইলের নামগুলিতে ফাঁকা পড়ে না।
মাইকেল বারকোভস্কি

@MichaelBerkowski: আপনি এটা ভালো ব্যবহার ফাইলের নামের মধ্যে হোয়াইটস্পেস সঙ্গে মোকাবিলা করার জন্য করতে পারেন: find . -type f -print0 | xargs -0 -I {} grep "search_string" {}। অবশ্যই, অন্যান্য বিকল্পগুলি পাশাপাশি যুক্ত করা যেতে পারে।
পাস্কাল

4
find . -type f -name '*php' -o -name '*js' -o -name '*html' |\
xargs grep -liE 'document\.cookie|setcookie'

3

আরও একটি বিকল্প অন্তর্ভুক্ত করতে আপনি এটি ব্যবহার করতে পারেন:

find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;

কোথায়:

  • -regextype posix-extended বলে find কি Regex ধরনের আশা
  • -regex "^.*\.(php|html|js)$"বলে findRegex নিজেই আবশ্যক ম্যাচ ফাইলগুলির নাম
  • -exec grep -EH '(document\.cookie|setcookie)' {} \;বিকল্পটি এবং এটি খুঁজে পাওয়া প্রতিটি ফাইলের findমধ্যে সুনির্দিষ্ট কমান্ডটি (তার বিকল্পগুলি এবং আর্গুমেন্ট সহ) চালাতে বলেছে যেখানে এই কমান্ডটিতে ফাইলের পথটি কোথায় প্রদর্শিত হবে তা উপস্থাপন করে।-exec\;{}

    যখন

    • E বিকল্প বলে grep বর্ধিত রেজেক্স ব্যবহার করতে (প্রথম বন্ধনী সমর্থন করার জন্য) এবং ...
    • Hবিকল্পটি grepম্যাচের আগে ফাইল পাথগুলি মুদ্রণ করতে বলে ।

এবং এটি প্রদত্ত, যদি আপনি কেবল ফাইলের পাথ চান তবে আপনি এটি ব্যবহার করতে পারেন:

find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u

কোথায়

  • |[পাইপ] findএর পরের কমান্ডের আউটপুট প্রেরণ করুন (যা sedতখন হয়sort )
  • r বিকল্প বলে sed এক্সটেন্ডেড রেজেক্স ব্যবহার করতে ।
  • s/HI/BYE/ বলে sed "বিদায়" এবং "হাই" এর প্রতি মাসের প্রথম সংঘটন (প্রতি লাইন) প্রতিস্থাপন করতে ...
  • s/(^.*):.*$/\1/এটি রেজেক্সকে প্রতিস্থাপন করতে বলে (^.*):.*$(যার অর্থ একটি গোষ্ঠী [অন্তর্ভুক্ত জিনিসগুলি ()] সমস্ত কিছু অন্তর্ভুক্ত] [ .*= এক বা একাধিক কোনও চরিত্রের সাথে] রেখার শুরু থেকে [ ^] 'প্রথম' অবধি: ' শেষে ' অবধি কিছু না হওয়া পর্যন্ত লাইন [ $]) প্রথম দ্বারা গ্রুপ [\1 প্রতিস্থাপনকৃত রেজেক্সের ] ।
  • uসদৃশ এন্ট্রিগুলি অপসারণ করতে বাছাই করে ((চ্ছিক sort -uহিসাবে গ্রহণ করুন )।

... সবচেয়ে মার্জিত উপায় হতে দূরে from যেমনটি আমি বলেছি, আমার উদ্দেশ্য সম্ভাবনার পরিধি বাড়ানো (এবং আপনি যে কোনও সরঞ্জামগুলি ব্যবহার করতে পারেন সে সম্পর্কে আরও সম্পূর্ণ ব্যাখ্যা দেওয়া)।

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