2011-05-06 9 views
31

मैं जंगली कार्ड "LMN2011*" के आधार पर file name को खोजने के लिए Grep कमांड का उपयोग कैसे कर सकता हूं?फ़ाइल नामों और फ़ाइल सामग्री के आधार पर फ़ाइल नाम सूचीबद्ध करें - जीआरईपी?

मैं उन फ़ाइल सामग्री पर एक और जांच जोड़ना चाहता हूं।

तो file content तरह

LMN20113456 

मैं इसके लिए GREP उपयोग कर सकते हैं कुछ बात है?

Grep -ls "LMN2011*" "LMN20113456" 

खोल आदेशों का उपयोग कर फ़ाइल नामों और इसकी सामग्री को खोजने का सही तरीका क्या है?

उत्तर

51

grep "वाइल्डकार्ड" का उपयोग नहीं करता खोज के लिए - कि, खोल ग्लोबिंग है * .jpg की तरह। Grep पैटर्न मिलान के लिए "नियमित अभिव्यक्ति" का उपयोग करता है। जबकि शैल '*' का अर्थ है "कुछ भी", grep में इसका अर्थ है "पिछले आइटम शून्य या अधिक बार मिलान करें"।

अधिक जानकारी और उदाहरण यहाँ: http://www.regular-expressions.info/reference.html

अपने प्रश्न का उत्तर देने के लिए - आप ग्रेप के साथ कुछ पैटर्न मिलान फ़ाइलों पा सकते हैं:

find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011 

तो फिर तुम अपनी सामग्री (केस असंवेदी) खोज सकते हैं:

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456' 

पथ रिक्त स्थान शामिल कर सकते हैं, तो आप "शून्य अंत" सुविधा का उपयोग करना चाहिए:

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456' 
+0

मैं सर्वर – zod

7
grep LMN20113456 LMN2011* 

या आप उपनिर्देशिकाएं के माध्यम से रिकर्सिवली खोज करने के लिए चाहते हैं:

find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \; 
+0

कैसे मैं सर्वर – zod

+0

में किसी पाठ फ़ाइल में परिणाम फ़ाइल नाम लिख सकते हैं मेल किए गए लाइनों के बजाय मिलान किए गए फ़ाइल नामों को सूचीबद्ध करने के लिए grep -l का उपयोग करें और फिर आउटपुट को फ़ाइल में रीडायरेक्ट करें। –

0

ढूंढें/फ़ोल्डर-प्रकार f -mtime -90 | grep -E "(.txt | .php | .inc | .root | .gif)" | xargs ls -l> WWWlastActivity.log

23

यह ग्रेप के "--include" विकल्प का उपयोग कर के रूप में अच्छी तरह से find बिना किया जा सकता।

ग्रेप आदमी पेज का कहना है:

--include=GLOB 
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude). 

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

grep -r --include=<pattern> <string> <directory> 

उदाहरण के लिए, सभी मेकफ़ाइलों में स्ट्रिंग "mytarget" की खोज करने के लिए:

grep -r --include="Makefile" "mytarget" ./ 

या सभी फ़ाइलों में खोज करने के लिए अंदर /home/me

grep -r --include="Make*" "mytarget" ./ 
+0

में किसी टेक्स्ट फ़ाइल में परिणाम फ़ाइल नाम कैसे लिख सकता हूं, यह जानना अच्छा होगा, "बिना खोज किए इसे कैसे किया जा सकता है", वास्तव में, केवल दृश्य बिंदु साझा करने के लिए – Victor

0

मान लें LMN2011* फ़ाइलों रहे हैं, लेकिन /home/me/temp या नीचे में कुछ भी लंघन: फ़ाइल नाम में "बनाओ" के साथ ing

find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456' 
संबंधित मुद्दे