एकाधिक निर्देशिकाओं को बाहर करने के लिए --exclude-dir ध्वज के साथ grep का उपयोग करना


17

मैं grepOSX पर उपयोग करने वाले शब्द के लिए रूबी ऑन रेल एप्लिकेशन के माध्यम से खोज रहा हूं , और मैं उन निर्देशिकाओं को बाहर करना चाहूंगा जो एक निश्चित पैटर्न से मेल खाते हैं।

मैं निम्नलिखित कमांड का उपयोग कर रहा हूं:

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'

यह कमांड वह नहीं कर रहा है जो मैंने सोचा था कि यह करेगा। यहाँ है कि मैंने सोचा कि यह कैसे काम करेगा:

  • i - केस असंवेदनशील खोज
  • n - प्रिंट लाइन नंबर जिसमें पैटर्न पाया जाता है
  • आर - खोज पुनरावर्ती
  • डब्ल्यू - मैं केवल पूरे शब्द चाहता हूं - यानी, "प्रत्यक्ष" से मेल खाता है, लेकिन "निर्देशिका" नहीं
  • -ई - विस्तारित नियमित अभिव्यक्ति का उपयोग करें
  • 'प्रत्यक्ष' - मैं जिस नियमित अभिव्यक्ति से मेल खाना चाहता हूं
  • । - वर्तमान निर्देशिका में खोजें
  • --exclude-dir -E 'git | log | परिसंपत्ति' - git या लॉग या एसेट से मेल खाने वाली निर्देशिका को बाहर करें।

बहिष्कृत निर्देशिका के संदर्भ में, कमांड अभी भी './git' और './log' निर्देशिकाओं के साथ-साथ './app/assets' में खोज समाप्त करती है।

मुझे स्पष्ट रूप से ज्ञान के एक मौलिक टुकड़े की कमी है, लेकिन मुझे नहीं पता कि यह क्या है।

जवाबों:


17

उस विकल्प के लिए मैन पेज का वर्णन भ्रामक है ... यह पैटर्न है जैसे ग्लब्स में रेगेक्स में पैटर्न नहीं है । प्रति infoपृष्ठ :

--exclude-dir = GLOB

किसी भी आदेश-पंक्ति निर्देशिका को एक नाम प्रत्यय से छोड़ें जो पैटर्न GLOB से मेल खाता हो। पुनरावर्ती खोज करते समय, किसी भी उपनिर्देशिका को छोड़ दें जिसका आधार नाम GLOB से मेल खाता है। GLOB में किसी भी अनावश्यक अनुगामी स्लैश को अनदेखा करें।

तो, आपके मामले में आप चला सकते हैं:

grep -inRw -E 'direct' . --exclude-dir={git,log,assets}

नामित निर्देशिका git, logऔर assetsया जैसे को बाहर करने के लिए

grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}

निर्देशिका नामों को समाप्त करने के लिए gitया साथ शुरू करना asset।


बहुत ही रोचक। मुझे लगता है मुझे देखना चाहिए कि एक ग्लोब क्या है।
— स्टीवन एल

मुझे खेद है, लेकिन इनमें से कोई भी काम नहीं कर रहा है। अगर मैं यह कहूं कि मुझे grep: grep (BSD grep) 2.5.1-FreeBSD का उपयोग कर रहा है तो क्या यह मदद करेगा?
— स्टीवन एल

क्योंकि मैं bsd grep ( freebsd.org/cgi/man.cgi?query=grep&sektion=&n=1 ) के लिए मैनुअल पढ़ रहा हूं, मैं स्तब्ध हूं और इसमें --exclude-dir का उल्लेख नहीं है। बू।
— स्टीवन एल

2
ठीक है - मैं अब समस्या देखता हूं। यह केवल Apple सिस्टम द्वारा उपयोग किए गए grep का एक संशोधित संस्करण होना चाहिए। मैं मैक ओएस एक्स पर हूं। मुझे यहां भ्रम के लिए खेद है। मुझे यकीन है कि स्टेक्सएक्सचेंज पर एक मंच कहीं और है जिसे मैं पोस्ट कर सकता हूं।
— स्टीवन एल

@ user245185 आप BSD पर हैं या OSX पर? दोनों यहां विषय पर हैं, लेकिन कृपया अपने प्रश्न को संपादित करें और हमें बताएं कि आप किस ओएस का उपयोग कर रहे हैं। जैसा कि आप खोज रहे हैं, मानक उपकरणों के व्यवहार कार्यान्वयन के बीच भिन्न होते हैं।
— terdon

8

--exclude-dirनहीं समझती |।

हालाँकि, आप --exclude-dirकई बार निर्दिष्ट करके एक ही प्रभाव प्राप्त कर सकते हैं, प्रत्येक उस निर्देशिका के लिए जिसे आप बाहर करना चाहते हैं:

grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'

इसने मेरे लिए काम किया। मैं होम डाइरेक्टरी को बाहर करना चाहता था लेकिन यह अन्य विकल्पों की तरह काम नहीं करता था --exclude-dir={home}। जब मैंने टाइप किया तब मैंने काम किया था--exclude-dir 'home'
— मुबीन इयसीर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.