उनके पाठ में एक विशेष शब्द वाली फाइलों को सूचीबद्ध करें


30

मैं फ़ाइलों को पुनरावर्ती और विशिष्ट रूप से सूचीबद्ध करना चाहूंगा जिनमें दिए गए शब्द हैं।

उदाहरण : 'चेक' शब्द की जाँच, मुझे लगता है कि सामान्य है

$ grep check * -R

लेकिन जैसा कि इस शब्द की कई घटनाएं हैं, मुझे बहुत अधिक आउटपुट मिलता है। इसलिए मुझे केवल उन फ़ाइलनामों को सूचीबद्ध करने की आवश्यकता है जिनमें दिए गए खोज शब्द हैं। मुझे लगता है कि कुछ चाल के साथ findऔर xargsयहाँ पर्याप्त होगा, लेकिन निश्चित नहीं।

कोई विचार?

जवाबों:


39

का प्रयोग करें -lया --files-with-matchesविकल्प है जो इस प्रकार से प्रलेखित है:

सामान्य उत्पादन को दबाएं; इसके बजाय प्रत्येक इनपुट फ़ाइल का नाम प्रिंट करें जिसमें से आउटपुट सामान्य रूप से प्रिंट किया गया होगा। स्कैनिंग पहले मैच पर रुक जाएगी। ( -lPOSIX द्वारा निर्दिष्ट किया गया है।)

तो, उदाहरण के लिए आप निम्नलिखित का उपयोग कर सकते हैं:

$ grep check * -lR

MSYS पर भी काम करता है। महान!
कोस

2
मैंने इस्तेमाल किया grep -rl "text to find" "/usr/share"और इसने बहुत काम किया!
Shrout1

18
find . -type f -exec grep -l check {} +

शायद आप उस -Rविकल्प का उपयोग नहीं करना चाहते हैं जो जीएनयू के आधुनिक संस्करणों के साथ grepनिर्देशिकाओं में उतरते समय सहानुभूति का अनुसरण करता है। -rइसके बजाय विकल्प का उपयोग करें जो कि संस्करण 2.12 (अप्रैल 2012) के बाद से अब सीमलिंक का अनुसरण नहीं करता है।

यदि आपका grep GNU एक नहीं है, या संस्करण 2.12 से पुराना है, या यदि आपको गैर-रक्तस्राव-धार-GNU प्रणालियों के लिए पोर्टेबल होने के लिए आपके कोड की आवश्यकता है, तो findऊपर दिए गए आदेश का उपयोग करें ।

अन्यथा, आप कर सकते हैं:

grep -rl check .

उपयोग न करें *(जैसा कि वर्तमान निर्देशिका में (और वर्तमान निर्देशिका में छिपी हुई फ़ाइलों को छोड़ना होगा) और उन फ़ाइलों के लिए समस्या पैदा करेगा, जिनके नाम के साथ शुरू होता है -), तर्कों के बाद पासिंग विकल्पों से बचें क्योंकि यह काम करने की गारंटी नहीं है पर्यावरण और पोर्टेबल नहीं है।


1

इसे इस्तेमाल करे:

find . -type f | xargs grep -c check $1 | grep -v ":0"

grepझंडे के लिए के रूप में ...

-c इसके बाद एक फ़ाइल नाम लौटाएगा: और एक संख्या जो यह दर्शाती है कि दी गई फ़ाइल में खोज स्ट्रिंग कितनी बार दिखाई देती है।

-vपहली grepखोज से आउटपुट लेगा , शून्य परिणाम वाली फ़ाइलों को फ़िल्टर करेगा, और गैर-शून्य परिणामों वाली फ़ाइलों को प्रिंट करेगा।


यदि आपके पास फ़ाइल (s) (या निर्देशक (ies)) है, जिनके नाम हैं, तो यह गलत निगेटिव हो जाएगा :0। करना बेहतर है grep -v ':0$'। यहां तक ​​कि वे उन रास्तों पर झूमेंगे जिनमें न्यूलाइन (ओं) हैं।
स्कॉट

0

grep -rin "whatToFind" locationToFInd

जैसे $ grep -rin "vihaan"।

पुन: खोज करेंगे और फ़ाइल नाम और संबंधित पंक्तियों को खोजेंगे, जिनमें "विहान" है, "।" वर्तमान निर्देशिका को संदर्भित करता है।


0
find . -type f | grep "keyword" *

वर्तमान निर्देशिका में खोजें। रूट से देखने के लिए, के /बजाय निर्दिष्ट करें.


0

grep -lR "text-to-find" <where-to-find> यह भी ठीक काम करता है।

जैसे, grep -lR "NAVIGATE" .जहां हम शब्द खोजने NAVIGATEमें .मौजूदा निर्देशिका में।


-2
 grep -rli trim \` find . -name *.q \` 

आपको .qफ़ाइलों की सूची दें जिसमें कीवर्ड शामिल हैtrim

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