एक निर्देशिका के तहत एक विशिष्ट एक्सटेंशन के साथ फ़ाइलों में Grep


11

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

स्ट्रिंग grep -irn "string" ./pathनिर्देशिका के अंतर्गत सभी फ़ाइलों के लिए एक पुनरावर्ती खोज देता है ./path। मेरी विशिष्ट आवश्यकता ./pathविस्तार के साथ सभी फाइलों को खोजने की है*.h

जवाबों:


11

कुछ परीक्षणों के बाद, मुझे लगता grep -irn 'string' --include '*.h'है कि अधिक उपयोगी है


1
यदि आप ऐसा करने जा रहे हैं, तो "*.h"उद्धरण में रखना सुनिश्चित करें।
G-Man

यह बिना उद्धरण के साथ काम करता है
जिनु जैकब

3
अब यह करता है। foobar.hवर्तमान निर्देशिका में एक फ़ाइल बनाने का प्रयास करें , और इसे फिर से प्रयास करें।
जी-मैन

10

एस एट (टर्न ऑन) कमांड के साथ sh ell ऑप्ट आयनglobstar

    shopt -s globstar

यह **एक फ़ाइल नाम घटक के रूप में यहाँ और नीचे सब कुछ मतलब होगा। तो निर्देशिका और इसके उपनिर्देशिकाpath/** में सब कुछ का मतलब है । (आपको यहां टाइप करने की आवश्यकता नहीं है।) तब आप उपयोग कर सकते हैंpath./

grep -in "string" path/**/*.h

और उसके भीतर की सभी .hफाइलों को खोजने के लिए path


आप के साथ यू nset विकल्प कर सकते हैंshopt -u



3

यदि आप अपनी मशीन पर कुछ स्थापित कर सकते हैं, तो मैं सुझाव देता हूं कि ack का उपयोग करें ।

आप वास्तव में वही कर सकते हैं जो आपको इसकी आवश्यकता है और बहुत कुछ। अपने उपयोग के मामले में, आप कर सकते हैं:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh पर फिल्टर फ़ाइलें
  • -मैं मामले की अनदेखी करता हूं

यह जानने के लिए कि कौन से फ़ाइल फ़िल्टर मूल रूप से समर्थित हैं, कमांड चलाएँ ack --help=type


वहाँ भी एजी , पूर्व की एक क्लोन है। पूर्व, क्योंकि उनके फीचर सेट के बाद से कुछ हद तक बदल गया है।
8bittree

मुझे नहीं पता था। साझा करने के लिए धन्यवाद।
AD

3

और इसका क्या?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

स्पष्टीकरण:

  • -L: सिमिलिंक का पालन करें
  • -name: तारांकन का उपयोग करके, आप एक्सटेंशन का वर्णन कर सकते हैं
  • -इन: आपके प्रस्ताव के समान, लेकिन findकमांड द्वारा 'आर' को बदल दिया जाता है
  • {}: यह findकमांड के परिणाम के लिए है
  • \; : यदि आप के findसाथ गठबंधन करते हैं -exec, तो यह एंड-ऑफ-कमांड निर्दिष्टकर्ता है

1
कैसे "*.h"काम करता है ? मैंने सोचा होगा कि यह होना जरूरी है'*.h'
जो

मैं हमेशा दोहरे उद्धरण चिह्नों के साथ काम करता हूं, मुझे नहीं लगता कि इससे कोई फर्क पड़ता है।
डोमिनिक

0

यदि आप gnu grep का उपयोग कर रहे हैं, तो इसे एक ध्वज मिला है, जो वास्तव में आपको चाहिए:

grep -irn --include=\*.h "string" path

हालांकि मुझे नहीं लगता कि यह अन्य greps में उपलब्ध है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.