क्रॉस डिस्ट्रीब्यूशन सेफ आंसर (विंडोज़ मिनीजीडब्ल्यू सहित)?
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
अगर आपके grep के पुराने संस्करणों (जैसे कि 2.4.2) का उपयोग करना जिसमें -o विकल्प शामिल नहीं है। उपरोक्त का उपयोग करें। वरना नीचे दिए गए संस्करण को बनाए रखने के लिए सरल का उपयोग करें।
लिनक्स क्रॉस वितरण सुरक्षित उत्तर
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
सारांश में -oh
, फ़ाइल की सामग्री (और इसका फ़ाइल नाम नहीं) के लिए नियमित अभिव्यक्ति मेल खाती है, ठीक उसी तरह जैसे आप vim / etc में काम करने के लिए नियमित अभिव्यक्ति की अपेक्षा कैसे करेंगे ... तब आप किस शब्द या नियमित अभिव्यक्ति की खोज करेंगे, यह ऊपर है आप! जब तक आप POSIX पर बने रहते हैं, तब तक पर्ल सिंटैक्स नहीं (नीचे देखें)
Grep के लिए मैनुअल से अधिक
-o Print each match, but only the match, not the entire line.
-h Never print filename headers (i.e. filenames) with output lines.
-w The expression is searched for as a word (as if surrounded by
`[[:<:]]' and `[[:>:]]';
मूल कारण सभी के लिए काम नहीं करता है
\w
प्लेटफ़ॉर्म से प्लेटफ़ॉर्म तक भिन्नता का उपयोग , इसके विस्तारित "पर्ल" सिंटैक्स के रूप में होता है। जैसे, उन grep स्थापना जो POSIX वर्ण वर्गों के उपयोग के साथ काम करने के लिए सीमित है, [[:alpha:]]
न कि इसके पर्ल के बराबर \w
। अधिक के लिए नियमित अभिव्यक्ति पर विकिपीडिया पृष्ठ देखें
अंत में, ऊपर POSIX उत्तर, grep के लिए प्लेटफ़ॉर्म (मूल) होने के बावजूद अधिक विश्वसनीय होगा
बिना -o विकल्प के grep के समर्थन के लिए, पहला grep प्रासंगिक लाइनों को आउटपुट करता है, tr नई लाइनों के लिए रिक्त स्थान को विभाजित करता है, अंतिम grep केवल संबंधित लाइनों के लिए फ़िल्टर करता है।
(पुनश्च: मुझे पता है कि अब तक अधिकांश प्लेटफ़ॉर्म, \ w के लिए पैच किए गए होंगे .... लेकिन हमेशा ऐसे होते हैं जो पिछड़ जाते हैं)
@AdamRosenfield उत्तर से "-o" वर्कअराउंड के लिए क्रेडिट