linux - grep, लेकिन केवल कुछ फ़ाइल एक्सटेंशन




unix search (8)

मैं कुछ निर्देशिकाओं को grep करने के लिए कुछ स्क्रिप्ट लिखने पर काम कर रहा हूं, लेकिन इन निर्देशिकाओं में फ़ाइल प्रकारों के सभी प्रकार होते हैं।

मैं अभी के लिए .h और .cpp grep करना चाहता हूं, लेकिन शायद भविष्य में कुछ अन्य।

अब तक मेरे पास है:

{ grep -r -i CP_Image ~/path1/;

grep -r -i CP_Image ~/path2/;

grep -r -i CP_Image ~/path3/;

grep -r -i CP_Image ~/path4/;

grep -r -i CP_Image ~/path5/;} 

| mailx -s GREP [email protected]

क्या कोई मुझे दिखा सकता है कि अब मैं केवल विशिष्ट फ़ाइल एक्सटेंशन कैसे जोड़ूं?


इनमें से कुछ उत्तर बहुत वाक्यविन्यास-भारी लगते थे, या उन्होंने मेरे डेबियन सर्वर पर मुद्दों का निर्माण किया। यह मेरे लिए पूरी तरह से काम किया।

grep -r --include=\*.txt 'searchterm' ./

... या केस-असंवेदनशील संस्करण ...

grep -r -i --include=\*.txt 'searchterm' ./
  • grep : कमांड

  • -r : पुनरावर्ती

  • -i : अनदेखा-मामला

  • --include : सभी * .txt: टेक्स्ट फ़ाइलें (यदि आपके पास फ़ाइल नामों में तारों के साथ निर्देशिका है तो बस से बचें)

  • 'searchterm' : क्या खोजना है

  • ./ : वर्तमान निर्देशिका से शुरू करें।


उत्तर के नीचे अच्छा है।

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

लेकिन इसे अपडेट किया जा सकता है:

grep -r -i --include \*.{h,cpp} CP_Image ~/path[12345] | mailx -s GREP [email protected]

जो अधिक सरल हो सकता है।


कैसा रहेगा:

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print

चूंकि यह फाइल ढूंढने का मामला है, चलिए खोज का उपयोग करें!

जीएनयू का उपयोग करके आप उन फ़ाइलों को उन निर्देशिकाओं के पेड़ में ढूंढने के लिए -regex विकल्प का उपयोग कर सकते हैं जिनका एक्सटेंशन या तो .h या .cpp :

find -type f -regex ".*\.\(h\|cpp\)"
#            ^^^^^^^^^^^^^^^^^^^^^^^

फिर, यह केवल अपने प्रत्येक परिणामों पर grep निष्पादित करने का मामला है:

find -type f -regex ".*\.\(h\|cpp\)" -exec grep "your pattern" {} +

यदि आपके पास यह वितरण नहीं है तो आपको अमीर अफगानी के दृष्टिकोण का उपयोग करना होगा, ताकि विकल्पों को जोड़ सकें ( नाम या तो .h या .cpp साथ समाप्त हो रहा है ):

find -type f \( -name '*.h' -o -name '*.cpp' \) -exec grep "your pattern" {} +
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

और यदि आप वास्तव में grep का उपयोग करना चाहते हैं, तो सिंटैक्स का पालन करें --include :

grep "your pattern" -r --include=*.{cpp,h}
#                      ^^^^^^^^^^^^^^^^^^^

बस --include पैरामीटर का उपयोग करें, इस तरह:

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

जो आप चाहते हैं वह करना चाहिए।


मुझे पता है कि यह प्रश्न थोड़ा दिनांकित है, लेकिन मैं सामान्य रूप से .c और .h फ़ाइलों को खोजने के लिए उपयोग की जाने वाली विधि साझा करना चाहता हूं:

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -H "#include"

या यदि आपको लाइन नंबर की भी आवश्यकता है:

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -nH "#include"

ag (रजत खोजकर्ता) के लिए बहुत सरल वाक्यविन्यास है

       -G --file-search-regex PATTERN
          Only search files whose names match PATTERN.

इसलिए

ag -G *.h -G *.cpp CP_Image <path>

grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./







grep