गैर-अंतःक्रियात्मक रूप से उपयोग करते समय, अधिकांश मानक कमांड, शामिल हैं grep, आउटपुट को बफर करते हैं, जिसका अर्थ है कि यह तुरंत डेटा नहीं लिखता है stdout। यह लिखने से पहले बड़ी मात्रा में डेटा (लिनक्स में ओएस पर निर्भर करता है, अक्सर 4096 बाइट्स) एकत्र करता है।
आपके आदेश में, grepआउटपुट को पाइप किया गया हैstdin की sedकमान है, इसलिए grepइसके उत्पादन बफ़र।
इसलिए, लाइन बफर का उपयोग --line-bufferedकरने के कारण विकल्प grep, आउटपुट लिखने का अर्थ है कि हर बार यह एक नई लाइन को देखा, बजाय डिफ़ॉल्ट रूप से 4096 बाइट्स तक पहुंचने का इंतजार करने के लिए। लेकिन इस मामले में, आप की जरूरत नहीं है grepसब पर, बस का उपयोग tail+ sed:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
कमांड जिसमें बफर को संशोधित करने का विकल्प नहीं है, आप GNU कोरुटिल्स stdbuf का उपयोग कर सकते हैं
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
लाइन बफरिंग या उपयोग चालू करने के लिए -o0बफर को अक्षम करने के लिए करने के लिए।
ध्यान दें