গ্রেপ লাইন বাফারিং কী করে?


25

আমার কমান্ডটি যা আমি একটি স্ক্রিপ্টে grepরিয়েল-টাইম ডেটা ব্যবহার করছি । এটি রিয়েল-টাইম ডেটা সঠিকভাবে টানছে বলে মনে হচ্ছে না কারণ এটি কিছু লাইনে মিস করেছে।

tail -f <file> | fgrep "string" | sed 's/stuff//g' >> output.txt

নিম্নলিখিত আদেশটি কি করবে? "লাইন বাফারিং" কী?

tail -f <file> | fgrep --line-buffered "string" | sed 's/stuff//g' >> output.txt

উত্তর:


44

অ-ইন্টারেক্টিভভাবে ব্যবহার করার সময়, বেশিরভাগ মানক কমান্ডগুলি অন্তর্ভুক্ত 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বাফার অক্ষম করতে ব্যবহার করতে।

বিঃদ্রঃ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.