অ-ইন্টারেক্টিভভাবে ব্যবহার করার সময়, বেশিরভাগ মানক কমান্ডগুলি অন্তর্ভুক্ত grep
করে আউটপুটটি বাফার করে, যার অর্থ এটি অবিলম্বে ডেটা লিখবে না stdout
। এটি লেখার আগে প্রচুর পরিমাণে ডেটা সংগ্রহ করে (লিনাক্সে ওএসের উপর নির্ভর করে, প্রায়শই 4096 বাইট)।
আপনার কমান্ডে, grep
আউটপুট কমান্ডের পাইপ করা stdin
হয় sed
, সুতরাং grep
এর আউটপুটটি বাফার করুন।
সুতরাং, --line-buffered
বিকল্পটি grep
লাইন বাফার ব্যবহারের কারণ , প্রতিবার আউটপুট লেখার অর্থ যখন এটি একটি নতুন লাইন দেখে, ডিফল্টরূপে 4096 বাইটে পৌঁছানোর অপেক্ষা না করে। কিন্তু এই ক্ষেত্রে, আপনি প্রয়োজন নেই grep
এ সব, শুধু ব্যবহার tail
+ + sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
বাফার পরিবর্তন করার বিকল্প নেই এমন কমান্ডের সাহায্যে আপনি জিএনইউ কোর্টিল স্ট্যাডবুফ ব্যবহার করতে পারেন
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
লাইন বাফারিং চালু করতে বা -o0
বাফার অক্ষম করতে ব্যবহার করতে।
বিঃদ্রঃ