2012-05-17 13 views
12

मेरे पास XYZ नाम की एक निर्देशिका है जिसमें निर्देशिका एबीसी, डीईएफ, जीएचआई है। मैं सभी निर्देशिकाओं में सभी * .c में एक पैटर्न 'writeText' खोजना चाहता हूं (यानी XYZ, XYZ/ABC, XYZ/DEF और XYZ/GHI) मैं किस grep कमांड का उपयोग कर सकता हूं?grep सभी निर्देशिकाओं में

अगर मैं केवल एक्सवाईजेड, एक्सवाईजेड/एबीसी, एक्सवाईजेड/जीएचआई और एक्सवाईजेड/डीईएफ में नहीं खोजना चाहता हूं, तो मैं किस grep कमांड का उपयोग कर सकता हूं?

धन्यवाद!

+1

'--recursive' और' --include'/'--exclude' झंडे शायद आप – geoffspear

उत्तर

24
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ 
  • -R पुनरावर्ती का मतलब है, तो यह मतलब है ".c फ़ाइलों के अंत में देखने के लिए"
  • --include="*.c" के माध्यम से निर्देशिका आप grepping रहे निदेशिकाओं में जाना होगा
  • --exclude-dir={DEF} का अर्थ है "को बाहर DEF नाम की निर्देशिकाएं। यदि आप एकाधिक निर्देशिकाओं को बाहर करना चाहते हैं, तो यह करें: --exclude-dir={DEF,GBA,XYZ}
  • writeFile वह पैटर्न है जिसे आप
  • /path/to/XYZ निर्देशिका के लिए मार्ग है जिसे आप grep करना चाहते हैं।

ध्यान दें कि इन झंडे जीएनयू grep पर लागू होते हैं, अलग अलग आप बीएसडी/SysV/AIX grep उपयोग कर रहे हैं हो सकता है। यदि आप लिनक्स/जीएनयू grep utils का उपयोग कर रहे हैं तो आपको ठीक होना चाहिए।

+0

धन्यवाद। यह काम! – Romonov

3

आप कम से कम अपने प्रश्न के पहले भाग का जवाब देने के लिए निम्न आदेश का उपयोग कर सकते हैं।

find . -name *.c | xargs grep "writeText" 
+1

यह संदेश प्राप्त करना चाहते हैं: ढूंढें। -नाम *। सी | xargs grep "writeText" ढूंढें: पथ अभिव्यक्ति से पहले होना चाहिए उपयोग: [पथ ...] [अभिव्यक्ति] – Romonov

+0

मैं अपनी उबंटू मशीन में काम करता हूं। क्या आप बस ढूंढने का प्रयास कर सकते हैं। -नाम *। सी, और परिणाम साझा करें। –

+0

वही संदेश। मेरा सिस्टम redhat है। – Romonov

-1

यह मेरे लिए काम किया। मैंने अपनी जरूरतों के लिए थोड़ा संशोधित किया। मैं टर्मिनल ऐप से मैकिंतोश ओएसएक्स 10.8.3 का उपयोग कर रहा हूं।

"* .c" के बजाय मैंने "उपयोग" का उपयोग किया "यह प्रत्येक फ़ाइल नाम का हिस्सा है जिसे मैं निर्देशिका में मौजूद कई अन्य फ़ाइलों में खोजना चाहता था।

मेरी स्थिति में मुझे "- exclude-dir" की आवश्यकता नहीं थी क्योंकि मैं अपने वर्तमान स्थान के नीचे सभी उप-निर्देशिकाओं को खोज रहा था।

लेखन में मैंने उपयोग किया (उद्धरण के साथ) "उपयोग =" या "अनुरोध" जो दो स्ट्रिंग्स था जिन्हें मैं फ़ाइल में ढूंढना चाहता था।

मैंने तब "।" यह इंगित करने के लिए कि मैं अपनी निर्देशिका को वर्तमान निर्देशिका में शुरू करना चाहता हूं।

मैं फिर एक> /[path]/[filename.txt] का उपयोग यह इंगित करने के लिए करता हूं कि मैं सभी आउटपुट को टेक्स्ट फ़ाइल में जोड़ना चाहता था।

धन्यवाद।

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