বাশে আমি .php|.html|.js
কেস-সংবেদনশীল স্ট্রিংযুক্ত প্রতিটি ধরণের ফাইলের জন্য ফাইলের নাম (এবং ফাইলের পথে) ফেরত দিতে চাই"document.cookie" | "setcookie"
আমি যে কিভাবে করতে হবে?
বাশে আমি .php|.html|.js
কেস-সংবেদনশীল স্ট্রিংযুক্ত প্রতিটি ধরণের ফাইলের জন্য ফাইলের নাম (এবং ফাইলের পথে) ফেরত দিতে চাই"document.cookie" | "setcookie"
আমি যে কিভাবে করতে হবে?
উত্তর:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
r
পতাকা (অনুসন্ধান সাবডিরেক্টরি) যাও recursively অনুসন্ধান মানে। i
পতাকা ক্ষেত্রে অসংবেদী মানে।
আপনি যদি কেবল ফাইলের নামগুলি l
(ছোট হাতের L
পতাকা) পতাকাটি যুক্ত করতে চান :
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ...
>egrep ...
grep: (error|fail): No such file or directory
উবুন্টু ডেস্কটপ 16 এ ত্রুটি পেয়েছি ; কোন ইঙ্গিত?
--include=\*.{php,html,js}
এরকম কিছু চেষ্টা করুন grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-i
এটি ঘটনাটিকে সংবেদনহীন করে তোলে
.
শেষ মানে আপনি আপনার বর্তমান ডিরেক্টরি থেকে শুরু করতে চান, এই যে কোনো ডিরেক্টরির প্রতিস্থাপিত যেতে পারে।
-r
মানে recursively এই না, ডান ডিরেক্টরি গাছটা
-n
মিলের জন্য লাইন সংখ্যা ছাপে।
--include
আপনাকে ফাইলের নাম, এক্সটেনশন যোগ করতে দেয়। ওয়াইল্ডকার্ড গ্রহণ করা হয়েছে
আরও তথ্যের জন্য দেখুন: http://www.gnu.org/software/grep/
-l
বিকল্পটি ব্যবহার করুন (কেবলমাত্র ফাইলের সাথে মেলে এমন ফাইলগুলি মুদ্রণ করুন)-n
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)'
-exec grep -l 'sth' {} \;
# egrep -ir --include=file.foo "(foo|bar)" /dir
মিচেল বারকোভস্কি ~ 500 গিগাবাইট ওয়েইগ ডিরেক্টরিতে এই ভাবে দ্রুত 5 বা 8 বারের বেশি ।
grep
বা এ্যাকের জন্য সম্ভবত একটি নিখুঁত কাজের মতো মনে হচ্ছে
বা এই দুর্দান্ত নির্মাণ:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...
আমার xargs
পদ্ধতির চেয়ে +1 ব্যবহার করা আরও ভাল কারণ এটি ফাইলের নামগুলিতে ফাঁকা পড়ে না।
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}
। অবশ্যই, অন্যান্য বিকল্পগুলি পাশাপাশি যুক্ত করা যেতে পারে।
আরও একটি বিকল্প অন্তর্ভুক্ত করতে আপনি এটি ব্যবহার করতে পারেন:
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)$"
বলে find
Regex নিজেই আবশ্যক ম্যাচ ফাইলগুলির নাম-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 যেমনটি আমি বলেছি, আমার উদ্দেশ্য সম্ভাবনার পরিধি বাড়ানো (এবং আপনি যে কোনও সরঞ্জামগুলি ব্যবহার করতে পারেন সে সম্পর্কে আরও সম্পূর্ণ ব্যাখ্যা দেওয়া)।