कार्यात्मक रूप से (आउटपुट के मामले में), वे दोनों समान हैं। पहला वास्तव में एक अलग प्रक्रिया cat
बनाता है जो फ़ाइल की सामग्री को मानक आउटपुट में भेजता है, जो grep
के मानक इनपुट पर दिखाई देता है, क्योंकि खोल ने दोनों को पाइप से जोड़ा है।
उस अर्थ में grep regex <filename
भी बराबर है लेकिन एक कम प्रक्रिया के साथ।
आप देख अंतर वेरिएंट में है जब अतिरिक्त जानकारी (फ़ाइल नाम) इस तरह के साथ के रूप में grep
द्वारा इस्तेमाल किया, है कहाँ शुरू करेंगे:
grep -n regex filename1 filename2
कि और के बीच अंतर:
cat filename1 filename2 | grep -n regex
कि पूर्व जानता अलग-अलग फ़ाइलों के बारे में जबकि बाद के रूप में एक फ़ाइल इसे देखता है (बिना किसी नाम के)।
पूर्व आप दे सकते हैं:
filename1:7:line with regex in 10-line file
filename2:2:another regex line
बाद हो जाएगा और अधिक की तरह:
7:line with regex in 10-line file
12:another regex line
एक और निष्पादन योग्य है कि अलग तरह से काम करता है अगर यह फ़ाइल नाम जानता है wc
है, शब्द काउंटर प्रोग्राम:
$ cat qq.in
1
2
3
$ wc -l qq.in # knows file so prints it
3 qq.in
$ cat qq.in | wc -l # does not know file
3
$ wc -l <qq.in # also does not know file
3
+1 में regex नामित सामग्री की खोज करता है: एक रूढ़िवादी (जैसे मुझे) का तर्क हो सकता है कि 'cat' हमेशा अपने मानक आउटपुट में लिखते हैं, लेकिन में पाइप का संदर्भ, इसका मानक आउटपुट एक पाइप का लेखन अंत है। इसी प्रकार, जब 'grep' को फ़ाइल नाम तर्क के साथ बुलाया जाता है, या जब यह '-' के फ़ाइल नाम तर्क को संसाधित करता है, तो यह इसके मानक इनपुट को पढ़ेगा, जो इस मामले में, पाइप का पढ़ा हुआ अंत है। ध्यान दें कि 'पाइप' या '|' एक आदेश नहीं है; यह बिल्कुल स्पष्ट नहीं है कि आप पहचानते हैं कि 'इतनी पाइप आगे नई इनपुट प्रक्रिया के रूप में आउटपुट के रूप में इनपुट को आगे बढ़ाती है'। –