tail -f path
उपरोक्त तुरन्त फ़ाइल में संशोधनों का उत्पादन करेगा, लेकिन मैं आउटपुट पर एक फ़िल्टर लागू करना चाहता हूं, केवल तब दिखाएं जब इसमें कोई कीवर्ड xxxहो।
इस से कैसे संपर्क करें?
tail -f path
उपरोक्त तुरन्त फ़ाइल में संशोधनों का उत्पादन करेगा, लेकिन मैं आउटपुट पर एक फ़िल्टर लागू करना चाहता हूं, केवल तब दिखाएं जब इसमें कोई कीवर्ड xxxहो।
इस से कैसे संपर्क करें?
जवाबों:
यूनिक्स के साथ आप एक प्रोग्राम के आउटपुट को दूसरे में पाइप कर सकते हैं।
तो पूंछ को छानने के लिए, आप grep का उपयोग कर सकते हैं:
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टूलचिन द्वारा प्रदान किया गया कुछ है (मैंने इसका इस्तेमाल कभी नहीं किया है)।
मुझे आशा है कि आपको यह उपयोगी लगा होगा।
चीयर्स, कैमरन
और आप कई पाइप और greps का उपयोग कर सकते हैं, और grep -v के साथ चीजों को बाहर कर सकते हैं, grep -i, आदि के साथ केस असंवेदनशीलता प्राप्त कर सकते हैं।
यानी: टेल -100 एफ / var / लॉग / मैसेज | grep -V एसीपीआई | grep -i अता
अंत से 100 लाइनों को पूंछना शुरू करें, और पूंछते रहें, पहले एसीपीआई के साथ किसी भी रेखा को बाहर करें, फिर एटीए, एटीए या उन में से किसी भी मिश्रण के साथ लाइनें दिखाएं।
एक और आसान एबीसी विकल्प है, लाइनों के बाद, पहले और संदर्भ के लिए (पहले और बाद की लाइनें)।