2013-01-02 9 views
6

मैं इस संरचना के साथ निर्देशिका में csv फ़ाइलें है:ग्रेप

20090120/ 
20090121/ 
20090122/ 
etc... 

मैं इन निर्देशिका में csv फ़ाइलें के सभी में एक निश्चित स्ट्रिंग के लिए grep चाहते हैं, लेकिन केवल जनवरी 200 9 के लिए, उदाहरण के लिए 200 9 * * * * सीएसवी

क्या कोई बैश कमांड लाइन तर्क है जो यह कर सकता है?

उत्तर

11

हां। grep "a certain string" 200901*/*.csv

5

आप की तरह कुछ की जरूरत है:

grep NEEDLE 200901*/*.csv 

(अपने खोज स्ट्रिंग संभालने निश्चित रूप से NEEDLE है - बस जो कुछ भी आप कर रहे हैं वास्तव में की तलाश के लिए इसे बदल)।

bash खोल बहु-स्तर पथ और फ़ाइल नामों का विस्तार करने में काफी सक्षम है।

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

हालांकि, आप गहराई पर एक सीमा निर्धारित कर सकते हैं यह सोचते हैं, तो आप (तीन के लिए स्तर) की तरह कुछ के साथ भाग मिल सकता है:

grep NEEDLE 200901*/*.csv 200901*/*/*.csv 200901*/*/*/*.csv 
+0

या, आप [ग्लोबस्टार सेट कर सकते हैं और ** का उपयोग कर सकते हैं] (http://wiki.bash-hackers.org/internals/shell_options#globstar) –

4

इस प्रयास करें:

grep -lr "Pattern" 200901*/*.csv 
0

एक प्रयास करें पैटर्न को खोजने के लिए का संयोजन विशिष्ट फ़ाइल नाम पैटर्न और grep खोजने के लिए

find . -name "*.csv" -print -exec grep -n "NEEDLE" {} \; | grep -B1 "NEEDLE" 
संबंधित मुद्दे