गैर-अंतःक्रियात्मक रूप से उपयोग करते समय, अधिकांश मानक कमांड, शामिल हैं 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
बफर को अक्षम करने के लिए करने के लिए।
ध्यान दें