tail -f path
উপরেরগুলি তাত্ক্ষণিকভাবে ফাইলটিতে আউটপুট পরিবর্তন করবে, তবে আমি আউটপুটটিতে একটি ফিল্টার প্রয়োগ করতে চাই, যখন সেখানে কোনও কীওয়ার্ড রয়েছে কেবল তখনই তা দেখায় xxx
।
কিভাবে এই কাছে যেতে?
tail -f path
উপরেরগুলি তাত্ক্ষণিকভাবে ফাইলটিতে আউটপুট পরিবর্তন করবে, তবে আমি আউটপুটটিতে একটি ফিল্টার প্রয়োগ করতে চাই, যখন সেখানে কোনও কীওয়ার্ড রয়েছে কেবল তখনই তা দেখায় xxx
।
কিভাবে এই কাছে যেতে?
উত্তর:
ইউনিক্সের সাহায্যে আপনি একটি প্রোগ্রামের আউটপুটটিকে অন্যটিতে পাইপ করতে পারেন।
সুতরাং লেজ ফিল্টার করতে, আপনি গ্রেপ ব্যবহার করতে পারেন:
tail -f path | grep your-search-filter
সংক্ষিপ্ত উত্তর: 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
সরঞ্জামচেনের সরবরাহ করা কিছু (আমি কখনও এটি ব্যবহার করি নি)।
আমি আশা করি আপনি এটি দরকারী পেয়েছি।
চিয়ার্স, ক্যামেরন
এবং আপনি একাধিক পাইপ এবং গ্রেপ ব্যবহার করতে পারেন, এবং গ্রেপ-ভি দিয়ে জিনিসগুলি বাদ দিতে পারেন, গ্রেপ-আই ইত্যাদির সাথে সংবেদনশীলতা পান etc.
যেমন: লেজ -100f / var / লগ / বার্তা | গ্রেপ-ভি এসিপিআই | গ্রেপ-আই আতা
প্রান্ত থেকে 100 টি লাইন টেলিং শুরু করুন এবং টেলিং চালিয়ে যান, প্রথমে এসিপিআইয়ের সাথে কোনও লাইন বাদ দিন, তারপরে আতা, এটিএ বা কোনও মিশ্রণ দিয়ে লাইনগুলি দেখান।
আর একটি সহজ হ'ল এবিসি বিকল্পগুলি, পরে, পূর্বে এবং প্রসঙ্গের রেখাগুলির জন্য (আগে এবং পরে লাইন)।