जब से तुम एक जोड़ी के नाम है, नियमित अभिव्यक्ति पर जाने के लिए रास्ता नहीं है यह वाला। पहले मैंने सोचा था कि यह जो या टॉम की नियमित अभिव्यक्ति पर सिर्फ एक grep गिनती के रूप में सरल था, लेकिन यह झगड़ा था कि यह उस परिदृश्य के लिए जिम्मेदार नहीं था जहां टॉम और जो एक ही रेखा पर हैं (या उस मामले के लिए टॉम और टॉम) ।
परीक्षण।txt:
tom is really really cool! joe for the win!
tom is actually lame.
$ grep -c '\<\(tom\|joe\)\>' test.txt
2
आप test.txt फ़ाइल से देख सकते हैं, 2 गलत जवाब है, तो हम नाम एक ही लाइन पर किया जा रहा है के लिए खाते की जरूरत है।
मैंने फिर grep -o का उपयोग केवल एक मिलान रेखा का हिस्सा दिखाने के लिए किया था जो पैटर्न से मेल खाता है जहां उसने फ़ाइल में टॉम या जो के सही पैटर्न मैचों को दिया था। फिर मैंने लाइन गिनती के लिए परिणामों को डब्ल्यूसी में लाइनों की संख्या में पाइप कर दिया।
$ grep -o '\(joe\|tom\)' test.txt|wc -l
3
3 ... सही उत्तर! आशा है कि इस मदद करता है
स्रोत
2011-08-24 08:08:52
grep लाइनों की गणना करता है, शब्द नहीं। क्या उस पर 'टॉमटॉम' वाली रेखा एक या दो के रूप में गिना जाता है? – tchrist
आप वास्तव में क्या चाहते हैं? आपके द्वारा निर्दिष्ट प्रत्येक शब्द के अनुसार एकाधिक मायने रखता है? आपके द्वारा निर्दिष्ट सभी शब्दों के लिए गणना का योग? "शब्द" क्या है - जैसा कि पहले से ही वर्णित है, आपका उदाहरण उन पंक्तियों की संख्या की गणना करता है जो regexp से मेल खाते हैं, शब्दों की संख्या नहीं। – GreyCat