एक bash स्क्रिप्ट में के लिए किसी और प्रिंट संदेश, मैं एक फ़ाइल मैं grep करना चाहते हैं में लाइनों की एक सूची है और फिर वहां से मानक है, जो थोड़ी देर के साथ किया सबसे आसान है पर प्रदर्शित पढ़ें:ग्रेप, कोई मेल नहीं
grep "regex" "filepath" | while read line; do
printf "$line\n"
done
हालांकि, मैं उपयोगकर्ता को सूचित करना चाहता हूं कि grep द्वारा कोई लाइन मेल नहीं खाती है। मुझे पता है कि कोई इसे updating a variable inside the loop द्वारा कर सकता है लेकिन ऐसा लगता है कि एक और अधिक सुरुचिपूर्ण दृष्टिकोण (यदि संभव हो) एक लूप तक एक रेखा को पढ़ने की कोशिश करना होगा, और यदि कोई आउटपुट नहीं था, तो एक त्रुटि संदेश प्रदर्शित किया जा सकता था।
यह मेरा पहला प्रयास था:
grep "regex" "filepath" | until [[ -z ${read line} ]]; do
if [[ -z $input ]]; then
printf "No matches found\n"
break
fi
printf "$line\n"
done
लेकिन इस उदाहरण में पढ़ें आदेश विकृत है, और मैं एक और तरीका वाक्यांश क्वेरी के बारे में सुनिश्चित नहीं था। क्या यह दृष्टिकोण संभव है, और यदि नहीं, तो समस्या का एक और अधिक उपयुक्त समाधान है?
आपके पहले उदाहरण में, केवल grep की आवश्यकता है और आपको वही व्यवहार मिलता है। क्या यह सिर्फ एक उदाहरण के लिए है या आप वास्तव में क्या करना चाहते हैं? – jordanm
क्या यह है? क्या आप दिखा सकते हैं कि कैसे? मैं अभी भी बैश के लिए काफी नया हूं और समझ नहीं पा रहा हूं कि उस व्यवहार को पाने के लिए grep का उपयोग कैसे करें। मैंने जो कोड लिखा है, वह अंतिम परिणाम दिखाता है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं, अपने प्रश्न का उत्तर देने के लिए। आह बिल्ली अनावश्यक है। हटाया गया, धन्यवाद। – seraththundhuil
grep मेल खाने वाली लाइनों को डिफ़ॉल्ट रूप से अपने मानक आउटपुट पर प्रिंट करता है, यही कारण है कि समय/पढ़ा हुआ लूप काम करता है यह मानक इनपुट पढ़ रहा है। बस 'grep "regex" "फ़ाइलपथ"' चलाएं और आपको अपनी मिलान रेखाएं देखना चाहिए। –