मैं गैर-तकनीकी दर्शकों के लिए एक प्रस्तुति दे रहा हूं। मेरे पास बैश में चलने वाला एक कार्यक्रम है जो मूल्यों की एक सतत धारा को आउटपुट करता है, जिनमें से कुछ महत्वपूर्ण हैं। मैं महत्वपूर्ण परिणामों को उजागर करना चाहूंगा क्योंकि वे प्रदर्शित किए जाते हैं ताकि दर्शकों को उनकी आवृत्ति का अंदाजा हो सके। मुद्दा यह है कि मैं sed
एक रनिंग स्ट्रीम पर काम नहीं कर सकता । यह ठीक काम करता है अगर मैं एक फ़ाइल में परिणाम डालते हैं, जैसे:
cat output.txt | sed "s/some text/some text bolded/"
लेकिन अगर मैं रनिंग आउटपुट पर इसी तरह की कोशिश करता हूं, तो इस तरह:
command | sed "s/some text/some text bolded/"
sed
कुछ नहीं करता। कोई विचार?
जैसा कि लैम्बर्ट इशारा करने में काफी मददगार थे, मेरा कहना है कि sed
कुछ भी अस्पष्ट नहीं था। क्या हो रहा है कि प्रोग्राम आउटपुट करता है stdout
(मुझे पूरा यकीन है कि यह लिखना नहीं है stderr
) जैसा कि सामान्य रूप से होता है, भले ही इसके माध्यम से पाइप किया गया हो sed
।
समस्या यह प्रतीत होती है कि कमांड एक दूसरे प्रोग्राम को कॉल करता है, जो तब stdout को आउटपुट करता है। पहले कार्यक्रम द्वारा मुद्रित कुछ पंक्तियाँ हैं; ये मैं संपादित कर सकता हूं। फिर दूसरे कार्यक्रम द्वारा मुद्रित मूल्यों की एक धारा है; ये मैं संपादित नहीं कर सकता।
Perl और awk विधियाँ या तो काम नहीं करती हैं।
command|egrep 'some text|$'
g
"वैश्विक" प्रतिस्थापन जोड़ना चाहिए , अन्यथा एक पंक्ति में केवल पहली घटना को प्रतिस्थापित किया जाएगा:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
काम करता है ?