`টেল-ফ` এর রিয়েল টাইম আউটপুটটিতে কীভাবে ফিল্টার প্রয়োগ করবেন?


60
tail -f path

উপরেরগুলি তাত্ক্ষণিকভাবে ফাইলটিতে আউটপুট পরিবর্তন করবে, তবে আমি আউটপুটটিতে একটি ফিল্টার প্রয়োগ করতে চাই, যখন সেখানে কোনও কীওয়ার্ড রয়েছে কেবল তখনই তা দেখায় xxx

কিভাবে এই কাছে যেতে?


1
উত্তর স্বীকৃত হিসাবে চিহ্নিত করা অন্যদের যারা আপনার প্রশ্নগুলি এবং তাদের উত্তরগুলি পড়তে জেনে সহায়তা করে তাদের কোন অনুরূপ প্রশ্ন বা সমস্যা থাকলে তাদের উত্তর সম্ভবত তাদের সহায়তা করার সম্ভাবনা বেশি। আপনি আপনার ব্যবহারকারীর নামটিতে ক্লিক করে আপনার আগের প্রশ্নগুলি আবার দেখতে পারেন।
ডেনিস উইলিয়ামসন

উত্তর:


84

ইউনিক্সের সাহায্যে আপনি একটি প্রোগ্রামের আউটপুটটিকে অন্যটিতে পাইপ করতে পারেন।

সুতরাং লেজ ফিল্টার করতে, আপনি গ্রেপ ব্যবহার করতে পারেন:

tail -f path | grep your-search-filter

তবে ধরা যাক আপনার লেজটিতে 100 টি লাইন রয়েছে (ফাইলের শেষে) এবং এই লাইনগুলি আপনি ফিল্টার করতে চান। আপনার সমাধান
ট্রেডারজয়েচিকাগো

1
আপনি যদি কেবল কোনও ফাইলের শেষ 100 লাইন অনুসন্ধান করতে চান তবে টেইল -100 পাথ চেষ্টা করুন , grep XXX
AddersUK

15

সংক্ষিপ্ত উত্তর: tail -f somefile | grep somepattern

যাইহোক, এটি কম পড়ার ঝোঁক। ধরা যাক আপনি এমন একটি ফাইল তৈরি করছেন যা প্রায়শই ঘোরানো হয় (যদি এটির ডিবাগ লগ হয় তবে এটি একাধিকবার ঘোরানো যেতে পারে)। সেক্ষেত্রে tail -Fআপনার বন্ধু। আমি আপনাকে পার্থক্য সন্ধান করতে দেব।

তবে tail -fএবং tail -Fপ্রথমে একগুচ্ছ রেখাগুলি মুদ্রণ করুন যা প্রায়শই এই ব্যবহারের ক্ষেত্রে অনাকাঙ্ক্ষিত হয় তাই এই ক্ষেত্রে যুক্ত করুন-n0

tail -F -n0 somefile | grep somepattern

এটি ঠিক থাকবে, যতক্ষণ না আপনি অন্য কিছু ফিল্টারিং করতে চান এবং তারপরে আপনার বাফারিং থেকে সাবধান থাকা দরকার। স্ট্যান্ডআউটটি টার্মিনালে লেখার সময় ডিফল্টরূপে লাইন-বাফার হয় তবে পাইপে লেখার সময় সম্পূর্ণ বাফার হয়। সুতরাং নিম্নলিখিতগুলি সন্ধানের সাথে সাথেই রেখাগুলি নির্গত করবে, কারণ tailস্পষ্টভাবে লাইন-বাফারড (বা এটি প্রতিটি লাইনের শেষে তার আউটপুটটি ফ্লাশ করে), এবং grepলাইন-বাফারযুক্ত কারণ এর আউটপুটটি আপনার টার্মিনালে যাচ্ছে:

tail -F -n0 somefile | grep somepattern

কিন্তু তারপর তোমার মত কিছু ব্যবহার করার সিদ্ধান্ত নেন awkবা cutআরও আউটপুট প্রক্রিয়া।

tail -F -n0 somefile | grep somepattern | awk '{print $3}'

এবং এখন আপনি আশ্চর্য হয়ে গেছেন যে আপনার আউটপুটটি কোথায় চলে গেছে ... লগগুলির পরিমাণের উপর নির্ভর করে আপনি দেখতে পাবেন যে আপনি আউটপুট পেয়েছেন তবে এটি একটি পৃষ্ঠা হবে কারণ এখন স্টাডাউট grepপুরোপুরি বাফার ফ্যাশনে কাজ করছে, এবং সুতরাং awkএটি একবারে 4kB ইনপুট গ্রহণ করে (ডিফল্টরূপে)।

এই ক্ষেত্রে, আপনি বিকল্পটি grepব্যবহার করে সর্বদা স্টডআউট লাইনটি বাফার করতে বলতে পারেন --line-buffered

tail -F -n0 somefile | grep --line-buffered somepattern | ...

তবে বেশিরভাগ কমান্ডের এনালগ নেই --line-buffered। আরও স্ক্রিপ্টযোগ্য সরঞ্জামগুলির ক্ষেত্রে, আপনি আউটপুটটি ফ্লাশ করতে একটি ফাংশন ব্যবহার করতে পারেন (উদাঃ awk, ফাংশনটি fflush()যা এর সি অংশ হিসাবে একই নাম ভাগ করে দেয়, পার্ল এবং পাইথনের মতো সরঞ্জামগুলির মধ্যে কিছু মিল রয়েছে)।

আপনার পছন্দগুলি cutসম্ভবত ভাগ্যের বাইরে রয়েছে; ... তবে আপনি অনুসন্ধানের চেষ্টা করতে পারেন unbuffer, যা আমি মনে করি যে expectসরঞ্জামচেনের সরবরাহ করা কিছু (আমি কখনও এটি ব্যবহার করি নি)।

আমি আশা করি আপনি এটি দরকারী পেয়েছি।

চিয়ার্স, ক্যামেরন


এটি লাইন-বাফার মোডে কেন কাজ করে তা বোঝার জন্য সত্যই আমি প্রশংসা করি । এটি একটি দুর্দান্ত অন্তর্দৃষ্টি, আপনাকে ধন্যবাদ।
সবুজ

2

এবং আপনি একাধিক পাইপ এবং গ্রেপ ব্যবহার করতে পারেন, এবং গ্রেপ-ভি দিয়ে জিনিসগুলি বাদ দিতে পারেন, গ্রেপ-আই ইত্যাদির সাথে সংবেদনশীলতা পান etc.

যেমন: লেজ -100f / var / লগ / বার্তা | গ্রেপ-ভি এসিপিআই | গ্রেপ-আই আতা

প্রান্ত থেকে 100 টি লাইন টেলিং শুরু করুন এবং টেলিং চালিয়ে যান, প্রথমে এসিপিআইয়ের সাথে কোনও লাইন বাদ দিন, তারপরে আতা, এটিএ বা কোনও মিশ্রণ দিয়ে লাইনগুলি দেখান।

আর একটি সহজ হ'ল এবিসি বিকল্পগুলি, পরে, পূর্বে এবং প্রসঙ্গের রেখাগুলির জন্য (আগে এবং পরে লাইন)।

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