grep और पूंछ -f?


28

क्या tail -fएक फ़ाइल पर (या समान) करना संभव है , और grepयह एक ही समय में है? मुझे उस तरह के व्यवहार की तलाश में अन्य आदेशों का बुरा नहीं लगेगा।

जवाबों:


46

GNU tailऔर GNU का उपयोग करते हुए grep, मैं tail -fस्ट्रेट-फॉरवर्ड सिंटैक्स का उपयोग करके grep करने में सक्षम हूं :

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

यह एक समाधान है जो इन दोनों उपयोगिताओं के अन्य कार्यान्वयन के साथ काम करता है, न कि केवल जीएनयू कार्यान्वयन।
Kusalananda

7

यह ठीक काम करेगा; आम तौर पर, grepतब इंतजार करेगा जब कोई प्रोग्राम आउटपुट नहीं कर रहा हो, और आउटपुट आते ही पढ़ते रहें, इसलिए यदि आप ऐसा करते हैं:

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

5 सेकंड के लिए कुछ भी नहीं होगा, फिर grep मिलान किए गए "परीक्षण" का उत्पादन करेगा, और फिर पांच सेकंड बाद जब पाइप प्रक्रिया करेगी तो यह बाहर निकल जाएगा


7

जोड़े --line-bufferedको grep, और कहा कि आप के लिए देरी को कम कर सकते हैं। कुछ मामलों में बहुत उपयोगी है।

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

2
यह तब उपयोगी है जब grepकिसी टर्मिनल पर आउटपुट नहीं जाता है (किसी अन्य प्रकार की फ़ाइल पर पुनर्निर्देशित)। लाइन बफ़रिंग डिफ़ॉल्ट है जब आउटपुट किसी टर्मिनल पर जाता है, तो इससे वहां कोई फर्क नहीं पड़ेगा। ध्यान दें कि वह विकल्प GNU विशिष्ट है।
स्टीफन चेजेलस

3

तुम सिर्फ कर सकते हैं पाइप के उत्पादन grepमेंtail -f । ऐसे प्रोग्राम भी हैं जो tail -fविशेष रूप से मल्टीटैल ( उदाहरण ) में फ़िल्टरिंग और रंग के साथ कार्यक्षमता को जोड़ते हैं


2

मैं इन सभी लोगों को उपयोग करने के लिए कह tail -fरहा हूं, लेकिन मुझे इनकी सीमाएं पसंद नहीं हैं! नई पंक्तियों को देखने के दौरान एक फ़ाइल खोजने की मेरी पसंदीदा विधि (उदाहरण के लिए, मैं आमतौर पर लॉग फ़ाइलों के साथ काम करता हूं, जिन्हें क्रोन नौकरियों के माध्यम से समय-समय पर निष्पादित प्रक्रियाओं के पुनर्निर्देशित आउटपुट में जोड़ा जाता है):

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

यह GNU टेल और ग्रिप मानता है। टेल मैनपेज (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 पोर्ट से आने वाले इनपुट के लिए परिणामों को सुनने के लिए grep सेट करता है
। दूसरी कमांड पूंछ -f के आउटपुट को netcat में पाइप करती है और इसे लोकलहोस्ट 1337 पर भेजती है। इसे स्थानीय रूप से करने के लिए आपको कमांड के दो सेटों में से प्रत्येक के लिए ttys को स्विच करना होगा। , या स्क्रीन की तरह कुछ का उपयोग करें।


0

यह काम करता हैं। लेकिन ध्यान रखें कि आउटपुट अब तात्कालिक नहीं है: यह पाइप के माध्यम से बफर हो जाता है।


माना। इसका परीक्षण करने के लिए, दो विंडो खोलें। tail -fएक विंडो में, और tail -f logfile | grep patternदूसरी विंडो में चलाएं । patternएक ही समय में दोनों विंडो वाली लाइनें हमेशा दिखाई नहीं देती हैं। मैंने देखा है कि दुर्लभ अवसरों पर 30 सेकंड के लिए लाइनें दिखाई देती हैं, जो कष्टप्रद थी।
स्टीफन लासिवस्की

यह पूंछ के एक या दूसरे उदाहरण को चलाने के बीच प्रणाली के फ़्लिप करने के लिए अधिक हो सकता है। एक बेहतर परीक्षा हमें teeया कुछ और होगी।
केविन कैंटू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.