linux - स्ट्रिंग "हैलो" वाली सभी फ़ाइलों के लिए वर्तमान निर्देशिका को खोजने के लिए मैं grep का उपयोग कैसे करूं, फिर भी.h और.cc फ़ाइलों को प्रदर्शित करता हूं?




bash unix (5)

मैं स्ट्रिंग "हैलो" युक्त किसी भी और सभी फ़ाइलों के लिए वर्तमान निर्देशिका को खोजने के लिए grep का उपयोग कैसे करूं और केवल .h और .cc फ़ाइलों को प्रदर्शित करूं?


आप फ़ाइल नाम निर्दिष्ट करने या stdin का उपयोग करने के बजाय वाइल्डकार्ड में पास कर सकते हैं।

grep hello *.h *.cc

यदि आपको एक पुनरावर्ती खोज की आवश्यकता है, तो आपके पास कई विकल्प हैं। आपको ack पर विचार करना चाहिए।

यह विफल होने पर, यदि आपके पास जीएनयू find और xargs :

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

/dev/null का उपयोग सुनिश्चित करता है कि आपको मुद्रित फ़ाइल नाम मिलते हैं; -print0 और -0 रिक्त स्थान (न्यूलाइन, आदि) वाले फ़ाइल नामों से संबंधित है।

यदि आपके पास बाधाएं नहीं हैं (रिक्त स्थान आदि के साथ), तो आप इसका उपयोग कर सकते हैं:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

यह उन कुछ नामों को उठा सकता है जिनका आप इरादा नहीं रखते थे, क्योंकि पैटर्न मिलान अस्पष्ट (लेकिन सरल) है, लेकिन अन्यथा काम करता है। और यह find और xargs गैर-जीएनयू संस्करणों के साथ काम करता है।


सबसे आसान तरीका: grep -Ril "आपका टेक्स्ट" /


find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello" find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"

विवरण के लिए find और xargs लिए मैन्युअल पृष्ठों की जांच करें।


grep -r --include=*.{cc,h} "hello" .

यह पढ़ता है: सभी .cc OR .h फ़ाइलों के लिए रिकर्सली (सभी उप निर्देशिकाओं में भी) खोजें जिनमें इस पर "हैलो" है . (वर्तमान निर्देशिका

एक और सवाल से





grep