2013-08-02 5 views
8

मैं एक समस्या मैं आशा करता हूं किसी के साथ ...ग्रेप -f

मैं का उपयोग कर एक अप ज़िप किया गया फ़ोल्डर पर खोज -f एक पुनरावर्ती fgrep/ग्रेप प्रदर्शन कर रहा हूँ मदद करने के लिए सक्षम हो जाएगा है मेरे कार्यक्रमों में से एक में निम्न आदेश:

आदेश मैं

grep -r -i -z -I -f /path/to/pattern/file /home/folder/TestZipFolder.zip 

उपयोग कर रहा हूँ पैटर्न फ़ाइल के अंदर स्ट्रिंग "डॉग" है कि मैं के लिए खोज करने के लिए कोशिश कर रहा हूँ है।

ज़िपित फ़ोल्डर में स्ट्रिंग "कुत्ते" वाली कई टेक्स्ट फ़ाइलें हैं।

grep -f कमांड को ज़िप्ड अप फ़ोल्डर के अंदर 3 फाइलों में स्ट्रिंग "डॉग" युक्त पाठ फ़ाइलों को सफलतापूर्वक पाता है, लेकिन यह आउटपुट को एक पंक्ति पर प्रिंट करता है और अंत में कुछ अजीब वर्ण दिखाई देते हैं जैसे पीके (जैसा कि नीचे दिखाया गया है)। और जब मैं अपने कार्यक्रम में कोशिश करते हैं और एक फाइल करने के लिए उत्पादन प्रिंट अन्य पात्रों ग्रेप -f कमांड से इस तरह के रूप ^B^T^@

आउटपुट अंत पर दिखाई देते हैं:

TestZipFolder/test.txtThis is a file containing the string DogPKtest1.txtDog, is found again in this file.PKTestZipFolder/another.txtDog is written in this file.PK 

मैं के प्रत्येक कैसे मिलेगा ऐसी फाइलें जहां स्ट्रिंग "डॉग" एक नई लाइन पर प्रिंट करने के लिए पाई गई है, इसलिए वे सभी एक लाइन पर एक साथ समूहित नहीं हैं जैसे वे अब हैं? आउटपुट में "पीके" और अन्य अजीब पात्र भी दिखाई दे रहे हैं और मैं उन्हें कैसे दिखने से रोक सकता हूं?

वांछित उत्पादन इन पंक्तियों के साथ

TestZipFolder/test.txt:This is a file containing the string Dog 
TestZipFolder/test1.txt:Dog, is found again in this file 
TestZipFolder/another.txt:Dog is written in this file 

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

इस के साथ तुम्हारी मदद की बहुत सराहना की है, धन्यवाद

उत्तर

10

आप एक बहु उत्पादन की जरूरत है, बेहतर zipgrep का उपयोग करें:

zipgrep -s "pattern" TestZipFolder.zip 

-s त्रुटि संदेश को दबाने के लिए है (वैकल्पिक) । यह आदेश फ़ाइल नाम के साथ प्रत्येक मिलान लाइनों को मुद्रित करेगा। यदि आप डुप्लिकेट नामों को हटाना चाहते हैं, जब फ़ाइल में एक से अधिक मैच होते हैं, तो कुछ अन्य प्रसंस्करण लूप/grep या awk या sed का उपयोग करके किया जाना चाहिए।

वास्तव में, zipgrep एक संयोजन egrep और अनज़िप है। और इसका उपयोग इस प्रकार है:

zipgrep [egrep_options] pattern file[.zip] [file(s) ...] [-x xfile(s) ...] 

ताकि आप इसे किसी भी egrep विकल्प पास कर सकें।

+0

क्या कोई तरीका है कि मैं यह भी दिखा सकता हूं कि मेरे प्रश्न में grep कमांड की तरह फ़ाइल में मिलान कहां है ?, केवल फाइल को सूचीबद्ध करने के विरोध में? - बहुत धन्यवाद –

+0

क्या आप वांछित आउटपुट प्रदान कर सकते हैं? यदि आप करते हैं, तो मैं कोशिश कर सकता हूं। – blackSmith

+0

वांछित आउटपुट दिखाने के लिए मेरे प्रश्न को अपडेट किया गया। यह वही प्रारूप है जब आउटपुट में होता है यदि आप किसी ऐसे फ़ोल्डर पर grep कमांड चलाते हैं जो ज़िप फ़ाइल नहीं है (यानी यह उस फ़ाइल का नाम देता है जो कोलन दिखाता है कि कॉलन कहां है) धन्यवाद बहुत सारे –