पूंछ-में, मैं कुछ खास कीवर्ड वाले सामान को कैसे फ़िल्टर करूं?


39

मैं tail -fअपने लॉग करना चाहता हूं। हालाँकि, मैं उन सभी चीज़ों को फ़िल्टर करना चाहता हूं जिनमें शब्द हैं:

"ईएलबी", "पीएसटीपी", "स्वास्थ्य"


2
Vanheusden.com/multitail के साथ आप महत्वपूर्ण चीजों को रंग सकते हैं या उन चीजों को फ़िल्टर कर सकते हैं जिन्हें आप देखना नहीं चाहते हैं, उदाहरण के लिए pantz.org/software/multitail/multitailconfig.html
oluies

जवाबों:


58

मुझे grep के बजाय awk का उपयोग करने के बारे में पता नहीं है, लेकिन यह मेरे लिए काम करता है:

tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'

EDIT: जैसा कि dmourati और Caleb ने बताया, आप सुविधा egrepके grep -Eलिए उपयोग कर सकते हैं । कुछ प्रणालियों पर यह उसी बाइनरी के लिए एक लिंक होगा, दूसरों में इसकी एक प्रति grep पैकेज द्वारा आपूर्ति की जाती है। किसी भी तरह से यह -Eस्विच के विकल्प के रूप में रहता है । हालाँकि, GNU grep मैन पेज के अनुसार:

[…] दो संस्करण कार्यक्रम egrepऔर fgrepउपलब्ध हैं। egrepके रूप में ही है grep -Efgrepके रूप में ही है grep -F। प्रत्यक्ष रूप से मंगलाचरण egrepया तो fgrepपदावनत कर दिया जाता है, लेकिन ऐतिहासिक अनुप्रयोगों की अनुमति देने के लिए प्रदान किया जाता है जो उन पर भरोसा करते हैं जो अनमॉडिफाइड हैं।

जब से वे पर्यायवाची आदेश हैं, तब तक यह वरीयता में नीचे आता है जब तक कि आपके पास egrep नहीं है। हालांकि आगे की संगतता के लिए इसे grep -Eसिंटैक्स का उपयोग करने की सिफारिश की जाती है क्योंकि अन्य विधि आधिकारिक तौर पर पदावनत है।


क्या वारंट के grep -Eबजाय egrepडुप्लिकेट उत्तर का उपयोग करना है ?
कालेब

@ कालेब मुझे दिखाई नहीं देता क्यों नहीं। वहाँ एक से अधिक तरह से त्वचा के लिए एक बिल्ली है, और इस साइट सभी सूची करने की क्षमता के लिए अनुमति देता है
DTest

1
हां, लेकिन वे केवल एक-दूसरे के लिए सहानुभूति रखते हैं, कुछ कार्यात्मक ओवरलैप के साथ दो अलग-अलग कार्यक्रम नहीं। तो यह एक 'परिशिष्ट' (पढ़ें: टिप्पणी) के अधिक नहीं होगा, एक पूर्ण जवाब नहीं है? मैं कम अपराधों के लिए downvotes लिया है ...
मार्सिन

@DTest: अधिकार से, दम्मती ने मुझे वास्तव में कुछ सेकंड के लिए पंच से हराया और हालांकि उन्होंने यह तर्क स्पष्ट नहीं किया कि वह यहां कुछ श्रेय की हकदार हैं। आप पार्टी में आने के बाद अलग-अलग थे क्योंकि आपके आने से पहले हम दोनों में कम से कम दो उतार-चढ़ाव थे। सिम्प्लेक्स को एक द्विआधारी से एक तर्क में बदलना आमतौर पर कुछ ऐसा होता है जिसके लिए आप एक टिप्पणी का उपयोग करते हैं, एक अलग उत्तर नहीं। आप त्वचा के लिए बिल्ली को अलग ढंग से चाहते का उपयोग करते हैं sed, awk, perl, multitailया ninja_foo
कालेब

1
@Dest: मैंने कुछ मूल स्रोतों को जोड़ने के लिए आपके उत्तर के लिए एक महत्वपूर्ण तथ्यात्मक संपादन करने की स्वतंत्रता ली। ऐसा लगता है कि भविष्य में उपयोग के लिए -E की सिफारिश की जाती है, इसलिए मैंने उसे चिह्नित किया, लेकिन आपके नोट को उन विकृतियों के बारे में हटा दिया, जिनमें एग्रेप नहीं है। डिस्ट्रो लेन का उल्लेख है कि एंग्रेप है, यह सिम्लिंक के बजाय सिर्फ एक अलग बाइनरी है।
कालेब

21

इसे एक ऐसे पाइप से अलग करने की कोशिश करें जिसे आप अलग-अलग शब्दों की सूची से अलग करना चाहते हैं:

tail -f log_file | egrep -v 'ELB|Pingdom|Health'

ध्यान दें कि मैचों की सूची के आसपास कोष्ठक का उपयोग करना वैकल्पिक है। चूँकि |grep द्वारा एक तार्किक या ऑपरेटर के रूप में व्यवहार किया जाता है, चाहे वह उप-समूह के हिस्से के रूप में हो या न हो। '(ELB|Pingdom|Health)'ठीक उसी तरह काम करेगा। कुछ के लिए, वाक्यविन्यास अधिक स्पष्ट हो सकता है; मुझे बिना टाइपिंग करना आसान लगता है क्योंकि मैं सिंगल मैच से संभव मैचों की सूची में बदल सकता हूं, बिना कोष्ठक जोड़ने के लिए।

अतिरिक्त क्रेडिट के लिए, यह उल्लेखनीय है कि multitailआउटपुट को फ़िल्टर करने पर निंजा फू करता है। उदाहरण के लिए आप अपने शब्दों को इस तरह से फ़िल्टर कर सकते हैं:

multitail -e ELB -e Pingdom -e Health -f log_file

आप इसे केवल फ़िल्टर करने के बजाय आउटपुट को रंग या अन्यथा हाइलाइट करने के लिए उपयोग कर सकते हैं।

संपादित करें: देखें DTests जवाब और कैसे egrep सिर्फ एक पदावनत वैकल्पिक बंद आग तरीका है की पूरी जानकारी के लिए टिप्पणियां grep -E


2
अभिव्यक्ति (') के साथ समाप्त नहीं होनी चाहिए, (") के साथ नहीं?
bbaja42

हाँ धन्यवाद कि एक टाइपो था। विकिपीडिया जैसे स्टैक एक्सचेंज साइट्स फ़ंक्शन के बाद से भविष्य के संदर्भ के लिए, इस तरह की चीज़ आप बस ठीक कर सकते हैं।
कालेब

मैंने सोचा था कि संपादित करने के लिए 6 वर्णों से अधिक होना चाहिए था?
सेरेक्स

यदि आपके पास उच्च प्रतिनिधि नहीं है, तो हाँ न्यूनतम 6 वर्ण है, लेकिन इस मामले में 1 वर्ण अति महत्वपूर्ण है। आप शरीर पर HTML टिप्पणी जोड़कर परिवर्तन को बाध्य कर सकते हैं। वर्ण सीमा की ओर गिने जाएंगे और आप यह नोट कर सकते हैं कि आप बदलाव क्यों कर रहे हैं।
कालेब

@ बहुआयामी सुझाव के लिए बहुत बहुत धन्यवाद यह कमाल है !! विश्वास नहीं कर सकता कि मैं इसके बिना अपने जीवन में इतनी देर तक चला।
sidewinderguy


3

आप इस जानकारी को लॉग इन क्यों करना चाहते हैं?

  • क्या यह कट्टरता के लिए कड़ाई है?
  • क्या आप लॉग फ़ाइल में अलग-अलग कीवर्ड या पैटर्न के आधार पर अलग-अलग स्क्रिप्ट निष्पादित करना चाहते हैं?

यदि आप लॉग फ़ाइलों की सामग्री के आधार पर स्क्रिप्टेड व्यवहार करना चाहते हैं, तो आप एक्सपेक्ट का उपयोग करके अपने फ़िल्टरिंग को करने की इच्छा कर सकते हैं। ( http://en.wikipedia.org/wiki/Expect ) एक्सपेक्ट एक Tcl एक्सटेंशन है लेकिन एक्सपेक्ट का एक पायथन संस्करण भी है।

अपेक्षा आपको स्टेटमेंट या स्टेटमेंट आपके इनपुट स्ट्रीम में मौजूद पैटर्न के आधार पर अलग-अलग व्यवहार निर्दिष्ट करने देती है, जिससे आपको यह शक्तिशाली लचीला स्विच मिलता है। उदाहरण के लिए:

expect {  
    "password:" {  
        send "password\r"  
    } 
    "yes/no)?" {  
        send "yes\r"  
        set timeout -1  
    }  
    timeout {  
        exit  
    }   
    -re . {  
        exp_continue  
    }  
    eof {  
        exit  
    }  
}

इसलिए आप अपेक्षित विवरण में पैटर्न निर्दिष्ट करते हैं, और आप विभिन्न व्यवहारों को निर्दिष्ट करते हैं, और आप पूरी चीज को एक लूप में लपेट सकते हैं, और आप बहुत शक्तिशाली फिल्टर आसानी से लिख सकते हैं, जो आपके इनपुट के भागों को अलग-अलग फाइलों में लिखते हैं, या इसे पूरी तरह से छोड़ देते हैं, या आपके इनपुट में क्या है इसके आधार पर कार्रवाई करें और अन्य स्क्रिप्ट चलाएं।

तो, यह नीचे आता है कि आप लॉग इनपुट पर कार्रवाई करने के लिए, या केवल अभिलेखीय कारणों से अपनी लॉग फ़ाइलों को फ़िल्टर करने की कोशिश क्यों कर रहे हैं?


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