গ্রেপ এবং লেজ -f?


28

একটি কাজ করতে এটা কি সম্ভব tail -f(অথবা অনুরূপ) একটি ফাইল-এ, এবং grepএকই সময়ে এটা? আমি অন্য কমান্ডগুলিকে কেবল এই জাতীয় আচরণের সন্ধানে কিছু মনে করব না।

উত্তর:


46

জিএনইউ tailএবং জিএনইউ ব্যবহার করে grepআমি tail -fস্ট্রেট-ফরোয়ার্ড সিনট্যাক্স ব্যবহার করে গ্রেপ করতে সক্ষম হয়েছি :

tail -f /var/log/file.log | grep search_term

এটি এমন একটি সমাধান যা কেবলমাত্র জিএনইউ বাস্তবায়ন নয়, এই দুটি ইউটিলিটির অন্যান্য বাস্তবায়নের সাথে কাজ করে।
কুসালানন্দ

7

এটা ঠিক কাজ করবে; আরও সাধারণভাবে, grepঅপেক্ষা করা হবে যখন কোনও প্রোগ্রাম আউটপুট না হয় এবং আউটপুট আসার সাথে সাথে পড়া চালিয়ে যায়, আপনি যদি করেন তবে:

$ (echo foo; sleep 5; echo test; sleep 5) | grep test

5 সেকেন্ডের জন্য কিছুই হবে না, তারপরে গ্রেপ ম্যাচযুক্ত "পরীক্ষা" আউটপুট দেবে, এবং তারপরে পাঁচ সেকেন্ড পরে পাইপ প্রক্রিয়াটি শেষ হলে এটি প্রস্থান করবে


7

যোগ --line-bufferedকরুন grep, এবং এটি আপনার জন্য বিলম্ব হ্রাস করতে পারে। কিছু ক্ষেত্রে খুব দরকারী।

tail -f foo | grep --line-buffered bar

2
এটি কার্যকর যখন আউটপুটটি grepটার্মিনালে যায় না (অন্য ধরণের ফাইলের দিকে পুনঃনির্দেশিত)। আউটপুট যখন টার্মিনালে যায় তখন লাইন বাফারিং ডিফল্ট হয়, সুতরাং সেখানে কোনও পার্থক্য হবে না। নোট করুন যে বিকল্পটি জিএনইউ নির্দিষ্ট।
স্টাফেন চেজেলাস


2

আমি এই সমস্ত লোককে ব্যবহার করতে বলতে দেখছি tail -f, তবে আমি এর সীমাবদ্ধতাগুলি পছন্দ করি না! নতুন রেখাগুলি দেখার সময় আমার একটি ফাইল অনুসন্ধান করার প্রিয় পদ্ধতি (যেমন, আমি সাধারণত লগ ফাইলগুলি নিয়ে কাজ করি যা ক্রোন জবসের মাধ্যমে পর্যায়ক্রমে সম্পাদিত প্রক্রিয়াগুলির পুনঃনির্দেশিত আউটপুট সংযোজন করা হয়):

 tail -Fn+0 /path/to/file|grep searchterm

এটি GNU লেজ এবং গ্রেপ ধরেছে। লেজ ম্যানপেজ থেকে সরবরাহকারী বিশদ (জিএনইউ কোর্টিলস, খনিটি v8.22) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :

 -F     same as --follow=name --retry
 -n, --lines=K
         output the last K lines, instead of the last 10; or use -n +K to output
         starting with the Kth.
         If  the first character of K (the number of bytes or lines)
         is a '+', print beginning with the Kth item from the start
         of each file, otherwise, print the last K items in the file.
         K may have a multiplier suffix: b 512, kB 1000, K 1024, MB
         1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024,
         and so on for T, P, E, Z, Y.

  With --follow (-f), tail defaults to following the file descriptor,
  which means that even if a tail'ed file is renamed, tail will
  continue to track its end.  This default behavior is  not  desirable
  when  you  really  want  to  track the actual name of the file, not
  the file descriptor (e.g., log rotation).  Use --follow=name in
  that case.  That causes tail to track the named file in a way that
  accommodates renaming, removal and creation.

সুতরাং, আমার কমান্ডের লেজের অংশটি সমান tail --follow --retry --lines=+0, যেখানে চূড়ান্ত যুক্তি শূন্য লাইনগুলি এড়িয়ে শুরুতে এটি শুরু করার নির্দেশ দেয়।


1
tail -f access | awk '/ADD/{print $0}'

উপরেরটি ব্যবহার করুন, আমি সাধারণত এটি ব্যবহার করি।


0

নতুন ফলাফলগুলি খুব সহজেই আসার কারণে আপনি লেজু-এর ফলাফলগুলি গ্রেপ করতে নেটকাট ব্যবহার করতে পারেন।

sudo nc -s localhost -l -p 1337 | grep ssh


tail -f /var/log/file.log | nc 127.0.0.1 1337

এটি 1337 বন্দর থেকে আসা ইনপুটটির ফলাফলগুলি শুনতে গ্র্যাপকে সেট করে
second , বা পর্দার মতো কিছু ব্যবহার করুন।


0

এটা কাজ করে। তবে খেয়াল রাখুন যে আউটপুট আর তাত্ক্ষণিক নয়: এটি পাইপের মাধ্যমে বাফার হয়ে যায়।


একমত। এটি পরীক্ষা করতে দুটি উইন্ডো খুলুন। tail -fএকটি উইন্ডো এবং tail -f logfile | grep patternঅন্য উইন্ডোতে চালান । লাইনযুক্ত লাইনগুলি patternসর্বদা একই সময়ে উভয় উইন্ডোতে উপস্থিত হয় না। আমি বিরল ইভেন্টগুলিতে 30 সেকেন্ডের ব্যবধানে লাইনগুলি উপস্থিত হতে দেখেছি, যা বিরক্তিকর ছিল।
স্টিফান লাসিউইস্কি

এটির সাথে লেজটির এক বা অন্য উদাহরণ চলমান ব্যবস্থার সাথে বিচ্ছিন্ন হয়ে যাওয়া আরও বেশি কিছু হতে পারে। একটি ভাল পরীক্ষা আমাদের teeবা কিছু।
কেভিন কেন্টু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.