Grep -r को डिफ़ॉल्ट रूप से कहां खोजा जाता है?


16

मैंने पाया कि अगर मैं एक रास्ता निर्दिष्ट किए बिना grep का उपयोग कर खोज करता हूं, जैसे कि grep -r 'mytext'यह असीम रूप से लंबा होता है। इस बीच अगर मैं पथ के साथ खोज करता हूं तो grep -r 'mytext' .यह तुरंत पता चलता है कि मुझे क्या चाहिए। तो, मैं उत्सुक हूं, पहले रूप में, किस निर्देशिका में grep खोज करता है?

UDATE: grep संस्करण: grep (GNU grep) 2.10


3
foomytextbarदौड़ने के बाद लिखने की कोशिश करें ( लिखने के बाद दर्ज करें) grep -r 'mytext'
sr_

2
शायद आपको यह निर्दिष्ट करना चाहिए कि वह किस राजा का grepहै। जीएनयू के साथ grepमैं लिनक्स पर उपयोग करता हूं grep -r 'mytext'और grep -r 'mytext' .यही काम करता है: वर्तमान निर्देशिका से पुन: प्रारंभ करना खोज। जब -rस्विच का उपयोग किया जाता है तो GNU STDIN को grep नहीं खोजता है।
मैनेटवर्क

2
आह। मैंने grep२.१२ के साथ परीक्षण किया : pastebin.com/L4my26QS इस बीच मुझे यह संस्करण २.११ (२०१२-०३-२०१२) के बारे में NEWS फाइल में मिला: "यदि कोई फ़ाइल ऑपरेंड नहीं दी जाती है, और कमांड-लाइन -r या समकक्ष विकल्प दिया जाता है। , grep अब वर्किंग डायरेक्टरी को खोजता है। पूर्व grep ने -r को अनदेखा कर दिया है और मानक इनपुट को गैर-खोज में खोज लिया है। GREP_OPTIONS में पाए गए -r का यह नया प्रभाव नहीं है। "
मैनटवर्क

3
GNU grep ने हाल ही में -r तर्क के साथ व्यवहार को बदल दिया (देखें कमिट )। इसलिए नए grep के साथ "grep -r PATTERN" वर्तमान निर्देशिका खोजेगा, न कि STDIN।
hluk

2
@ मिकेल, मैंने एक grep संस्करण के साथ अपना प्रश्न अपडेट किया। ऐसा लगता है कि मैंने जिस उत्तर को सही बताया, वह वास्तव में सही है, क्योंकि मैं एक 'पुराने' grep का उपयोग कर रहा हूं। तो इससे कोई फर्क नहीं पड़ता कि मैं निर्दिष्ट करता हूं -r या नहीं, यदि कोई निर्देशिका प्रदान नहीं की गई है, तो यह STDIN में खोज करती है। Btw, उस जांच के लिए धन्यवाद, अब, मुझे grep में भविष्य के बदलावों के बारे में पता

जवाबों:


24

वास्तव में यह कहीं भी खोज नहीं करता है। यह मानक इनपुट से इनपुट की प्रतीक्षा करता है।

इसे इस्तेमाल करे:

beast:~ viroos$ grep foo

जब आप "फू" और हिट दर्ज करने वाली लाइन टाइप करते हैं तो इस लाइन को दोहराया जाएगा अन्यथा कर्सर को नई लाइन में ले जाया जाएगा लेकिन grep कुछ भी प्रिंट नहीं करेगा।


6
जैसा कि मैंने grep -r PATTERNGNU grep के नए संस्करण के साथ ऊपर टिप्पणी की है, मानक इनपुट नहीं पढ़ेगा, लेकिन वर्तमान निर्देशिका में पैटर्न खोजेगा ( कमिट देखें )। जब आप -rध्वज निर्दिष्ट करते हैं, तो यह परिवर्तन समझ में नहीं आता क्योंकि आप मानक इनपुट को खोजना नहीं चाहते हैं ।
hluk

मैंने अपने grep संस्करण की जाँच की, यह 2.10 है, इसलिए यह उत्तर पूरी तरह से प्रासंगिक है। Btw, अब, मुझे पता है कि grep के नए संस्करणों से इंतजार करना होगा।

3

वास्तव में Maciek द्वारा पिछले जवाब के रूप में कहते हैं:

वास्तव में यह कहीं भी खोज नहीं करता है। यह मानक इनपुट से इनपुट की प्रतीक्षा करता है।

हालाँकि, आप पहले से चल रहे प्रोग्राम के स्टैड में लिख सकते हैं यदि आपके पास 0 प्वॉइंट डिस्क्रिप्टर में पाइपिंग डेटा द्वारा उपलब्ध / प्रोक्योरमेंट है:

एक टर्मिनल रन में

grep "hello"

और इसे अनिश्चित काल तक प्रतीक्षा करें ... एक अन्य टर्मिनल प्रकार में:

echo "hello $USER" > /proc/`pgrep grep`/fd/0

पहला टर्मिनल प्रिंट हैलो और अपना उपयोगकर्ता नाम देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.