2009-07-30 7 views
23

जब मैं आदेश का उपयोग करें:खोजने के द्वारा प्रदान की गई फ़ाइलों को खोजने के लिए grep का उपयोग करना: खोजने में क्या गलत है। | xargs grep '...'?

find . | xargs grep '...' 

मैं गलत मैचों मिलता है। मैं मौजूदा फ़ोल्डर में सभी फ़ाइलों में स्ट्रिंग ... की खोज करने का प्रयास कर रहा हूं।

+3

आप अधिक उदाहरण है? –

+4

तो सबसे पहले, आपको सीखना होगा कि सवाल कैसे पूछें, ठीक से। तकनीकी रूप से, इसमें कुछ भी गलत नहीं है। सवाल यह है कि आप क्या करना चाहते हैं। इसका सही वर्णन करें और स्पष्ट रूप से – ghostdog74

+0

क्या आपका मतलब है, मुझे जवाब के रूप में क्या मिलता है? – cupakob

उत्तर

37

के रूप में एंडी व्हाइट ने कहा, आप सादे . मेल, या डॉट्स से बचने के लिए में fgrep उपयोग करना होगा।

तो तुम लिखने के लिए है (-type f केवल फ़ाइलों के लिए है: आप स्पष्ट रूप से निर्देशिका नहीं करना चाहती।):

find . -type f | xargs grep '\.\.\.' 
:

find . -type f | xargs fgrep '...' 

या आप अभी भी ग्रेप उपयोग करना चाहते हैं

और आप केवल वर्तमान निर्देशिका चाहते हैं और न इसके उपनिर्देशिका यदि:

find . -maxdepth 1 -type f | xargs fgrep '...' 
+2

'grep -F '...' 'को भी – Hasturkun

+2

@ हास्टुरकुन: हाँ काम करना चाहिए। मेरे पास अतिरिक्त विकल्पों की तुलना में अलग-अलग कमांड नामों को पसंद करने की प्रवृत्ति है (जैसे 'gzip -d'' के बजाय 'gunzip' का उपयोग करना)। आमतौर पर स्वाद का मामला। –

2

यदि आप सचमुच grep '...' टाइप कर रहे हैं तो आप किसी भी स्ट्रिंग के बारे में मेल खाते हैं। मुझे संदेह है कि आप वास्तव में अपने grep कमांड के लिए '...' टाइप कर रहे हैं, लेकिन यदि आप हैं, तो ... किसी भी तीन वर्णों से मेल खाएगा।

कृपया जो भी आप खोज रहे हैं उस पर अधिक जानकारी पोस्ट करें, और शायद कोई और आपकी मदद कर सकता है।

1

आप एक फ़ाइल नाम कि मैच के लिए देख रहे हैं, की कोशिश:

find . -name "filename pattern" 

या

find . | grep "filename pattern" 

यदि आपका फ़ाइलों कि मैच की तलाश की तलाश में (यानी इसमें grep स्ट्रिंग)

find . | xargs grep "string pattern" 

ठीक काम करता है। या बस:

grep "string pattern" -R * 
+0

हां, मैं उन फ़ाइलों की तलाश में हूं जिनमें स्ट्रिंग के रूप में "..." है, लेकिन: 1. ढूंढें। | xargs grep "स्ट्रिंग पैटर्न" या 2. grep "स्ट्रिंग पैटर्न" -R * मदद नहीं करता है। – cupakob

7

'।' किसी भी चरित्र से मेल खाता है, इसलिए आपको उन सभी पंक्तियां मिलेंगी जिनमें 3 या अधिक वर्ण हों।

आप या तो डॉट्स, इस तरह से बच सकते हैं:

find . | xargs grep '\.\.\.' 

या आप उपयोग कर सकते हैं fgrep है, जो एक regex मैच के बजाय एक शाब्दिक मैच करता है:

find . | xargs fgrep '...' 

(कुछ ग्रेप के संस्करण एक-एफ ध्वज भी स्वीकार करते हैं जो उन्हें fgrep की तरह व्यवहार करता है।RTFM:)

-1

जेरेमी के जवाब पूरा करने के लिए, आप भी प्रयास करने के लिए

find . -type f | xargs grep 'your_pattern' 

या

find . -type f -exec grep 'your_pattern' {} + 

जो एक xargs

मैं जोड़ सकते हैं के समान है चाहते हो सकता है! या अधिक विनम्र तरीके से: &

man command 

का दुरुपयोग करें!

+1

अधिक विनम्र? दोस्ताना मैनुअल पढ़ें? इसे कैसे अपवित्र माना जा सकता है? विनम्र सनकी :) –

+0

मैन पेज वास्तव में बहुत दोस्ताना हैं और वे बार-बार पढ़ने के लिए उत्सुक हैं। (आपने मेरा दिन बनाया, जेरेमी एक्सडी) –

+0

बाद में यह हो जाता है, मेरी टिप्पणियां अधिक अप्रिय होती हैं। मुझे लगता है कि मैं अब चोटी कर रहा हूँ। यह यहाँ से सभी ढलान है। –

5

@OP, तो आप देख रहे हैं कि फ़ाइलों को शामिल ..., के लिए

grep -R "\.\.\." * 
+1

अब तक का सबसे सरल समाधान। grep में रिकर्सिव फ़ाइल खोज में बनाया गया है। – duckbrain

संबंधित मुद्दे