grepकमांड लाइन तर्क देखने से पहले , उस तर्क को शेल द्वारा पार्स किया गया है। शेल के लिए, *"वर्तमान निर्देशिका में सभी गैर-डॉट फाइलें" के लिए एक वाइल्डकार्ड है। चूंकि शेल पहले तर्क को संभालता है, आपकी रेखा इस में बदल जाती है:
cat abcd | grep abcd otherfile zfile
(यह मानते हुए कि वे तीन फाइलें आपकी वर्तमान निर्देशिका में रहती हैं)। यह वही है जो grepइसके तर्कों को देखने के लिए मिलता है, लेकिन यह वह नहीं है जो आप चाहते हैं।
इसके बजाय, आप grepउद्धरण चिह्नों के लिए पैटर्न रख सकते हैं , ताकि यह शेल द्वारा संसाधित न हो :
cat abcd | grep "*"
यह बेहतर है, लेकिन फिर भी आप क्या चाहते हैं: grepनियमित अभिव्यक्ति का उपयोग करता है, शेल-स्टाइल वाइल्डकार्डिंग नहीं। तारांकन के लिए grep, का अर्थ है "पिछले चरित्र की 0..n पुनरावृत्ति" - एक ऐसा चरित्र जिसे आपने निर्दिष्ट नहीं किया था। नजदीक पर बिना सिगार के।
यदि आप "कोई भी" पैटर्न चाहते हैं, तो आप "एक मनमाना चरित्र के 0..n दोहराव" की तलाश कर रहे हैं । उत्तरार्द्ध को '.'नियमित अभिव्यक्तियों में अवधि ( ) द्वारा दर्शाया गया है :
cat abcd | grep ".*"
वही जो तुम चाह रहे थे।
संपादित करें: अन्य मामला अधिक आसानी से समझाया गया है। साथ grep ""आप एक के लिए देख रहे खाली स्ट्रिंग है, जो किसी भी स्ट्रिंग में सबस्ट्रिंग के रूप में मौजूद है।
_? मेरी मशीन पर, यह, पैदावार_: command not found।