तुम पास हो। एक फ़ोल्डर में सभी .txt फ़ाइलों के भीतर "हा" की सभी घटनाओं की कुल संख्या प्राप्त करने के लिए:
grep -o "ha" *.txt | wc -l
से man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
यह काम करता है क्योंकि से प्रत्येक मैच एक अलग लाइन पर मुद्रित होता है, इस प्रकार अनुमति देता है wc -l
उन सभी को गिनने के लिए।
डिफ़ॉल्ट रूप से, हालांकि, grep केवल एक लाइन पर पहली घटना पाता है और पूरी लाइन को आउटपुट करता है। इसी तरह, विकल्प -c
केवल सभी लाइनों में पहली घटना मिलती है, फिर आउटपुट देता है कि कितने लाइनों में 1 (या अधिक) मैच थे।
संपादित करें:
यहां प्रत्येक व्यक्तिगत फ़ाइल के भीतर होने वाली घटनाओं की कुल संख्या को प्रिंट करने का एक तरीका है (फाइलनाम के साथ):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
स्पष्टीकरण:
find *.txt
- .txt फाइलें ढूंढता है
-printf
- एकल-उद्धरण (स्वरूपित) के बीच मानक आउटपुट के लिए सब कुछ प्रिंट करता है, की घटनाओं को प्रतिस्थापित करता है %p
खोज के आउटपुट के साथ (फ़ाइल नाम)
$(grep -o "ha" %p | wc -l)
- ऊपर के रूप में काम करता है
| sh
- से आउटपुट -printf
(जो कमांड हैं) को एक शेल में पाइप किया जाता है और निष्पादित किया जाता है
ध्यान दें कि फ़ाइल नाम के अनुसार प्रिंटफ़ को एक बार लागू किया जाता है।