बाश में मैं .php|.html|.jsकेस-असंवेदनशील स्ट्रिंग वाली हर फ़ाइल के लिए फ़ाइल नाम (और फ़ाइल का पथ) वापस करना चाहता हूं"document.cookie" | "setcookie"
मुझे यह कैसे करना है?
बाश में मैं .php|.html|.jsकेस-असंवेदनशील स्ट्रिंग वाली हर फ़ाइल के लिए फ़ाइल नाम (और फ़ाइल का पथ) वापस करना चाहता हूं"document.cookie" | "setcookie"
मुझे यह कैसे करना है?
जवाबों:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
rझंडा (खोज उपनिर्देशिका) रिकर्सिवली खोज करने के लिए इसका मतलब है। iझंडा केस संवेदी मतलब है।
यदि आप केवल फ़ाइल नाम जोड़ना चाहते हैं l(निचला L) ध्वज:
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directoryUbuntu डेस्कटॉप 16 पर त्रुटि मिली ; कोई संकेत?
--include=\*.{php,html,js}
कुछ ऐसा आजमाएं grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-iयह मामला insensitlve बनाता है
.अंत का मतलब है कि आप अपने वर्तमान निर्देशिका से शुरू करना चाहते हैं, यह किसी भी निर्देशिका के साथ प्रतिस्थापित किया जा सकता है।
-rसाधन रिकर्सिवली ऐसा करते हैं, सही निर्देशिका वृक्ष नीचे
-nमैचों के लिए लाइन नंबर प्रिंट करता है।
--includeआप फ़ाइल नाम, एक्सटेंशन जोड़ सकते हैं। वाइल्डकार्ड स्वीकार किए जाते हैं
अधिक जानकारी के लिए देखें: http://www.gnu.org/software/grep/
-lविकल्प का उपयोग करें (सिर्फ मैच के प्रिंट फ़ाइलनाम)-n
findउन्हें और grepस्ट्रिंग के लिए:
यह नियमित अभिव्यक्ति के लिए आपके 3 प्रकार / शुरू / पथ और grep में सभी प्रकार की फाइलें ढूंढेगा '(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~ 500Gb weigth डायरेक्टरी पर 5 या 8 से अधिक बार सबसे तेज़ ।
के लिए एक आदर्श नौकरी की तरह लगता है grepया शायद पावती
या यह अद्भुत निर्माण:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...मेरी xargsविधि से बेहतर है क्योंकि यह फ़ाइल नाम के स्थानों पर चोक नहीं करेगा।
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 "^.*\.(php|html|js)$"findरेगेक्स ही बताता है कि फ़ाइल नाम से मेल खाना चाहिए-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/इसे रेगेक्स को बदलने के लिए कहता है (^.*):.*$(मतलब एक समूह [सामानों से घिरा हुआ ()] जिसमें सब कुछ शामिल है [ .*= एक या किसी भी चरित्र का] लाइन की शुरुआत से [ ^] तक 'पहले': 'के अंत तक कुछ भी ' के बाद बदला हुआ रेगेक्स के पहले समूह [ ] द्वारा लाइन [ $] ]।\1uडुप्लिकेट प्रविष्टियों को हटाने के लिए सॉर्ट करता है ( sort -uवैकल्पिक रूप में लें )।... सबसे सुंदर तरीका होने से एफएआर। जैसा कि मैंने कहा, मेरा इरादा संभावनाओं की सीमा को बढ़ाना है (और कुछ टूल्स जो आप उपयोग कर सकते हैं उन पर अधिक संपूर्ण स्पष्टीकरण देना)।