निम्नलिखित इनपुट फ़ाइल पर विचार करें:
1
2
3
4
चल रहा है
{ grep -q 2; cat; } < infile
कुछ भी नहीं छापता। मुझे उम्मीद है कि यह प्रिंट होगा
3
4
यदि मैं इसे बदलता हूं तो मुझे अपेक्षित आउटपुट मिल सकता है
{ sed -n 2q; cat; } < infile
पहला कमांड अपेक्षित आउटपुट प्रिंट क्यों नहीं करता है?
यह एक खोजी इनपुट फ़ाइल है और विकल्प के तहत मानक के अनुसार :
-q
Quiet. Nothing shall be written to the standard output, regardless of
matching lines. Exit with zero status if an input line is selected.
और नीचे, आवेदन उपयोग के तहत (मेरा जोर दें):
-q
विकल्प आसानी से निर्धारित करने या नहीं, एक पैटर्न (या स्ट्रिंग) फ़ाइलों के एक समूह में मौजूद है के एक साधन के प्रदान करता है। कई फ़ाइलों की खोज करते समय, यह एक प्रदर्शन सुधार प्रदान करता है ( क्योंकि यह पहला मैच पाते ही छोड़ सकता है ) [...]
अब, एक ही मानक के अनुसार (में परिचय , के तहत इनपुट फ़ाइलें )
जब एक मानक उपयोगिता एक शोध योग्य इनपुट फ़ाइल को पढ़ती है और एक त्रुटि के बिना समाप्त हो जाती है, तो यह फ़ाइल के अंत तक पहुंचने से पहले, उपयोगिता सुनिश्चित करेगी कि खुले फ़ाइल विवरण में फ़ाइल ऑफ़सेट उपयोगिता द्वारा संसाधित अंतिम बाइट से ठीक पहले स्थित है । ..]
tail -n +2 file
(sed -n 1q; cat) < file
...
दूसरा कमांड केवल उसी के बराबर है जब फ़ाइल की तलाश हो।
grep -q
पूरी फ़ाइल का उपभोग क्यों करता है ?
यह तब होता है gnu grep
जब यह मायने रखता है (हालांकि कुसलानंद ने पुष्टि की कि ओपनबीएसडी पर भी ऐसा ही होता है)
grep
कुछ चीज़ों का एक कांटा है , जिसे FreeGrep कहा जाता है , अगर किसी को आश्चर्य होता है।