उपनिर्देशिकाओं के अंदर केवल एक विशिष्ट फ़ाइल में एक स्ट्रिंग का पता लगाएं


10

मान लें कि मुझे GetTypes()सभी C # स्रोत फ़ाइल ( .cs) निर्देशिकाओं / उपनिर्देशिकाओं में फ़ंक्शन खोजने की आवश्यकता है ।

मैंने उपयोग किया grep -rn GetTypes *.cs, लेकिन मुझे एक त्रुटि मिली grep: *.cs: No such file or directory। मुझे उपयोग करना था grep -rn GetTypes *, लेकिन इस मामले में यह न *.csकेवल सभी फाइलों को दिखाता है ।

केवल .csफाइलों में स्ट्रिंग खोजने के लिए मुझे किस कमांड का उपयोग करने की आवश्यकता है ?


जवाबों:


12

यदि आपका खोल बैश है ,4, अपने shopt -s globstarमें डालें ~/.bashrc। यदि आपका शेल zsh है, तो आप अच्छे हैं। तब तुम दौड़ सकते हो

grep -n GetTypes **/*.cs

**/*.cs*.csवर्तमान निर्देशिका में, या इसके उपनिर्देशिका में, पुनरावर्ती रूप से मेल खाती सभी फाइलें ।

यदि आप एक शेल नहीं चला रहे हैं जो समर्थन करता है **लेकिन आपका grep समर्थन करता है --include, तो आप एक पुनरावर्ती grep कर सकते हैं और grepकेवल कुछ निश्चित पैटर्न से मेल खाने वाली फ़ाइलों पर विचार कर सकते हैं । फ़ाइल नाम पैटर्न के आसपास के उद्धरणों पर ध्यान दें: इसकी व्याख्या grep द्वारा की जाती है, शेल द्वारा नहीं।

grep -rn --include='*.cs' GetTypes .

केवल पोर्टेबल टूल के साथ (कुछ सिस्टम में बिल्कुल नहीं है grep -r), findडायरेक्टरी ट्रैवर्सल पार्ट के grepलिए और टेक्स्ट सर्च पार्ट के लिए उपयोग करें।

find . -name '*.cs' -exec grep -n GetTypes {} +

अस्थायी रूप से globstarवर्तमान बैश 4+ शेल के लिए विकल्प सेट करें , का उपयोग करें shopt -s globstar:।
tjanez

8

आपको बिलियंट लिटिल grep की जांच करनी चाहिए / जिसे प्रतिस्थापन कहा जाता है ack। यह विशेष रूप से स्रोत कोड फ़ाइलों की निर्देशिकाओं को खोजने के लिए सेटअप है।

आपका आदेश इस तरह दिखेगा:

ack --csharp GetTypes

4

यदि आप GNU का उपयोग करते हैं grep, तो आप निर्दिष्ट कर सकते हैं कि कौन सी फ़ाइलों को पुनरावर्ती निर्देशिका ट्रैवर्सल में शामिल किया जाए:

grep --include '*.cs' -rn GetTypes .

(जहां अंतिम अवधि वर्तमान कामकाजी निर्देशिका को मूल के मूल के रूप में दर्शाती है)


4

मैं खोज और grep के संयोजन का उपयोग कर रहा हूं:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

के लिए find, आप .एक निर्देशिका द्वारा प्रतिस्थापित कर सकते हैं और हटा -nameसकते हैं यदि आप हर फ़ाइल में देखना चाहते हैं।

के लिए grep, -bnस्थिति और लाइन नंबर को प्रिंट करेगा और --colorआपकी आंखों को यह बताकर मदद करेगा कि आप क्या देख रहे हैं।

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