2009-11-19 16 views
5

के लिए फ़िल्टर फ़ंक्शन उदाहरण के साथ बढ़ती लॉग फ़ाइल देखते समय "कम -iS + F service.log" मैं चाहता हूं ताकि एक निश्चित पैटर्न से मेल खाने वाली रेखाओं को प्रदर्शित किया जा सके।कम + एफ

मैं की तरह

less +F service.log | grep <pattern> | less +F 

जो कुछ काम नहीं करता है की कोशिश की। इसके अलावा

cat < service.log | grep <pattern> | less +F 

जो मैं चाहता हूं वह नहीं करता है। ऐसा लगता है कि इनपुट पहले ही बंद हो चुका है और कम परिवर्तन नहीं दिखाता है।

मैं किसी निश्चित पैटर्न से मेल खाने वाली रेखाओं पर डिस्प्ले को कैसे सीमित कर सकता हूं?

उत्तर

0
tail -f service.log | grep <pattern> 
+0

मेरे सवाल पर विचार के लिए धन्यवाद, हालांकि यह वास्तव में मैं क्या चाहते हैं नहीं है। मैं "कम" कार्यक्षमता चाहता हूं, यानी परिणामी आउटपुट के भीतर स्क्रॉलिंग, खोज, हाइटलाइटिंग करना चाहता हूं। कुछ "tail -f service.log | grep | कम + एफ" जो दुर्भाग्य से ऐसा नहीं करता है। – axelrose

0

समाधान लग रहा था बस

LESSOPEN='|grep <pattern> %s' less +F service.log 

लेकिन कम से बढ़ लॉग फ़ाइल से नई लाइनों को पढ़ने के लिए जारी रखने के लिए नहीं है।

1

आप को उत्पन्न करने और प्रक्रियाओं की एक जोड़ी प्रत्येक पंक्ति नीचे फाड़ कोई आपत्ति नहीं है, जबकि पाश

tail -f filename.log|while read line; do echo $line | grep pattern; done 
1

मैं अभी तक बाहर काम नहीं है कि कैसे एक अस्थायी फ़ाइल के बिना यह करने के लिए पढ़ने का उपयोग करें, लेकिन यहां एक स्क्रिप्ट है जो एक कार्यात्मक grep -फिल्टर less +F प्रदर्शित करती है (जो इसकी अस्थायी फ़ाइल को साफ़ करती है)। मैं इसे lessf कहता हूं।

प्रमुख तत्वों में से एक यह है कि tail उत्पादन की अनुमति देता है पाइप लाइन के माध्यम से प्रवाह करने के लिए जारी रखने के लिए grep को --line-buffered तर्क है (unbufferexpect द्वारा प्रदान की कमान किसी भी कार्यक्रम के लिए इसी तरह की सुविधा प्रदान करता है)।

#!/bin/sh 
LOGFILE=$1 
shift 
[email protected] 
TEMP_DIR=/tmp/lesstmp 
TEMP_FILE="$TEMP_DIR/$(basename $LOGFILE)" 
[ ! -d $TEMP_DIR ] && mkdir $TEMP_DIR 
trap 'rm -rf "$TEMP_DIR"; exit' INT TERM EXIT 
(tail -f "$LOGFILE" | grep --line-buffered $PATTERN) > "$TEMP_FILE" | less +F "$TEMP_FILE" 
trap - INT TERM EXIT 

उदाहरण उपयोग:

lessf /var/log/system.log foobar

lessf /var/log/system.log -v nobar