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 लाइनों को पूंछना शुरू करें, और पूंछते रहें, पहले एसीपीआई के साथ किसी भी रेखा को बाहर करें, फिर एटीए, एटीए या उन में से किसी भी मिश्रण के साथ लाइनें दिखाएं।
एक और आसान एबीसी विकल्प है, लाइनों के बाद, पहले और संदर्भ के लिए (पहले और बाद की लाइनें)।