टेल-ऑफ़ शो कलर्ड आउटपुट कैसे करें


264

मैं उस सर्वर लॉग फ़ाइल के आउटपुट को पूंछने में सक्षम होना चाहता हूं जिसमें संदेश हैं:

INFO
SEVERE

आदि, और यदि यह है SEVERE, तो लाल रंग में रेखा दिखाएं; अगर यह INFOहरे रंग में है। किस प्रकार का उपनाम मैं एक tailकमांड के लिए सेटअप कर सकता हूं जो मुझे ऐसा करने में मदद करेगा?


जवाबों:


234

आजमाएँ multitail । यह एक übergeneralization है tail -f। आप अलग-अलग विंडो में कई फ़ाइलों को देख सकते हैं, उनकी सामग्री और अन्य चीजों के आधार पर हाइलाइट कर सकते हैं।

multitail -c /path/to/log

रंग विन्यास योग्य हैं। यदि डिफ़ॉल्ट रंग योजना आपके लिए काम नहीं करती है, तो अपना स्वयं का विन्यास फाइल में लिखें। उदाहरण के लिए, multitail -cS amir_log /path/to/logनिम्नलिखित के साथ कॉल करें ~/.multitailrc:

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE

एक अन्य समाधान, यदि आप एक सर्वर पर हैं जहां गैर- मानक उपकरण स्थापित करना असुविधाजनक है , तो tail -fरंग चयन नियंत्रण अनुक्रमों को जोड़ने के लिए sed या awk के साथ संयोजन करना है। tail -fइसके मानक आउटपुट एक पाइप होने पर भी बिना देरी के इसके मानक आउटपुट को फ्लश करने की आवश्यकता है, मुझे नहीं पता कि क्या सभी कार्यान्वयन ऐसा करते हैं।

tail -f /path/to/log | awk '
  /INFO/ {print "\033[32m" $0 "\033[39m"}
  /SEVERE/ {print "\033[31m" $0 "\033[39m"}
'

या sed के साथ

tail -f /path/to/log | sed --unbuffered \
    -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
    -e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'

यदि आपकी sed GNU sed नहीं है, तो \o033शाब्दिक बच चरित्र द्वारा प्रतिस्थापित करें और निकालें --unbuffered

फिर भी एक और संभावना Emacs शेल बफर tail -fमें चलने और Emacs के सिंटैक्स रंग क्षमताओं का उपयोग करने की है।


आप ऐसा कैसे कर सकते हैं sed? (आलसी होने के लिए खेद है और इसे खुद नहीं समझ पा रहे हैं!) लेकिन क्या आप कृपया एक sedउदाहरण भी जोड़ देंगे ।
अली

5
@ एली सेड कम सुविधाजनक है क्योंकि इसमें भागने वाले चरित्र के लिए कोई सिंटैक्स नहीं है, आपको इसे स्क्रिप्ट में शाब्दिक रूप से उपयोग करने की आवश्यकता है या इसे काम करने के लिए शेल क्विंग विधि का उपयोग करना होगा। मेरी सलाह है कि आप awk का उपयोग करें।
गिल्स

8
अपने में @Gilles tail -fसाथ awkकोड, अगर एक स्ट्रिंग नहीं है जानकारी और गंभीर , स्ट्रिंग प्रिंट नहीं किया जा रहा है। मैं शेष तारों को कैसे प्रिंट कर सकता हूं ? (स्ट्रिंग को रंगीन होने की ज़रूरत नहीं है)
बेंजामिन

6
@Benjamin ; nextआगे की प्रक्रिया को छोड़ने के लिए समापन ब्रेसिज़ से पहले जोड़ें , और 1 {print}अंत में एक नई प्रोसेसिंग लाइन ( 1हमेशा की तरह)।
गिल्स

3
sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
दिमित्रीसंडोव 15

119

grc , जेनेरिक कोलौरीज़र बहुत अच्छा है।

apt-get install grc

बस करो

grc tail -f /var/log/apache2/error.log

और आनंद लो!

आप इसे GitHub पर भी पाएंगे ।


2
यह वही है जो मुझे चाहिए था: हल्का और सरल। रंग मेरे लॉग प्रकार (कस्टम लॉग) के लिए बिल्कुल सही नहीं है, लेकिन किसी भी रंग से मुझे लॉग का पालन करना आसान हो जाता है।
रेनैट

मेरे लिए डेबियन त्रुटियों पर 'grc' के साथ: OSError: [Errno 13] अनुमति से इनकार कर दिया। इसके अलावा यह पायथन पर भी निर्भर करता है, इसलिए इसे तब तक हल्का नहीं रखें जब तक आपके पास पहले से ही यह न हो। मैंने बहुत बेहतर, पूर्व काम करने के लिए 'ccze' पाया है। 'टेल -फ-एन 50/var/log/starbound-server.log | ccze -A '।
डैनियल सोकोलोस्की

1
उबंटू में grc डिफ़ॉल्ट सेटिंग्स ने syslogs या mail.log के लिए अच्छा प्रदर्शन नहीं किया। इसे कैसे अनुकूलित किया जाए, यह समझना आसान नहीं है।
लेप

1
मैंने इसे मल्टीटैल की तुलना में जल्दी और आसानी से रंग दिया। बस मेरे CentOS सिस्टम पर स्रोत के माध्यम से एक त्वरित इंस्टॉल किया और मेरे जीवन को उन्नत किया। मेरे दूसरे सिस्टम पर भी इंस्टॉल हो जाएगा।
जीशान


51

क्या आपने ccze पर एक नज़र डाली है ? आपके पास विकल्प -cया सीधे अपनी कॉन्फ़िगरेशन फ़ाइल का उपयोग करके कुछ कीवर्ड के डिफ़ॉल्ट रंगों को अनुकूलित करने की संभावना है । यदि आपकी स्क्रीन रंग भरने के बाद साफ़ हो रही है तो आपको विकल्प का उपयोग करना चाहिए -A

संपादित करें:

यदि आप वास्तव में पूरी तरह से लाल रंग की लाइन का रंग चाहते हैं, तो आप निम्नलिखित में भी एक कोशिश कर सकते हैं:

$ tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'

\e[1;31mआपको लाल रंग देगा। यदि आप कुछ पीले, उपयोग \e[1;33m, और हरे रंग के उपयोग के लिए चाहते हैं \e[1;32m\e[0mसामान्य पाठ रंग पुनर्स्थापित करता है।


1
यह मैक पर काम नहीं करता है - मैं इसे बढ़ा रहा हूं क्योंकि यह लिनक्स पर काम करता है।
अमीर अफगानी

Upvoting क्योंकि perl / ansi ट्रिक शायद ccze नहीं करता है।
शादुर

1
आप अपने टर्मिनल को भी \007रेगेक्स के अंत में जोड़कर एक अलर्ट या "बीप" भेज सकते हैं , जैसे perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;':। यदि आप tmux का उपयोग कर रहे हैं, तो इस स्थिति में यह बहुत बढ़िया काम करता है set -g bell-action any, यदि आप किसी अन्य विंडो में अपना लॉग टेलिंग करते हैं, तो विंडो का नाम जब भी regex का पता चलता है, अलर्ट हो जाएगा।
जोनामो

@AmirAfagani यह एक लिनक्स / यूनिक्स एसई साइट है, इसलिए मुझे यकीन नहीं है कि आपने क्यों सोचा कि यह मैक पर काम करेगा।
B:06ови '

1
@ B @овиЈ मैक एक यूनिक्स है।
क्रिस डाउन

34

Lnav , उन्नत लॉग फ़ाइल दर्शक पर एक नजर है ।

lnav lnav

यह विभिन्न स्वरूपों को सुंदर रूप से प्रिंट भी कर सकता है।

इससे पहले:

lnav पहले सुंदर

उपरांत:

lnav-सुंदर


लॉग विश्लेषण उपकरण किट के लिए वास्तव में अच्छा इसके अलावा। सलाह के लिये धन्यवाद।
पैट्रिक एलियनस

24

आप इंद्रधनुष का उपयोग कर सकते हैं , जो नियमित अभिव्यक्ति के आधार पर लाइनों को रंग देता है:

rainbow --red='SEVERE.*' --green='INFO.*' tail -f my-file.log

यह भी पूर्वनिर्धारित विन्यास के साथ बंडल में आता है , उदाहरण के लिए टॉमकैट लॉग के लिए:

rainbow --config=tomcat tail -f my-file.log

(अस्वीकरण: मैं लेखक हूं)


2
मैंने इस प्रश्न की पेशकश की अन्य समाधानों में से अधिकांश की कोशिश की, लेकिन इंद्रधनुष केवल एक ही था जो सूरज, ऐक्स, लिनक्स, टर्मक्स, डार्विन और साइबरविन पर समान रूप से अच्छी तरह से काम करता था - 6 ((!) वातावरण मैं दैनिक आधार पर उपयोग करता हूं। अन्य सभी में कम से कम कुछ प्लेटफार्मों के लिए कठिन गैर-पोर्टेबल निर्माण प्रक्रियाएं शामिल थीं।

1
rainbowकमाल है। क्या आप लेखक हैं? यदि हां, तो कृपया उस उत्तर के साथ अपना उत्तर संपादित करें।
बिशप

हाँ, क्षमा करें, संपादित
निकोलज

15

आप colortail का उपयोग कर सकते हैं :

colortail -f /var/log/messages

2
उबंटू रिपॉजिटरी में उपलब्ध +1। Ccze की तुलना में मुझे कोलोरटेल पसंद है कि आप RegEx का उपयोग करके अपने पैटर्न को स्वतंत्र रूप से अनुकूलित कर सकते हैं। उपलब्ध रंग: काला, चमकीला, सफेद, चमकीला, मैजेंटा, ब्राइटमैगेंटा, सियान, ब्राइटसीयन, हरा, green ब्राइटग्रीन, पीला, ब्राइटाइलो, लाल, चमकीला, नीला, चमकीला। दुर्भाग्य से नारंगी जैसे बोल्ड या अन्य रंगों को सेट करने का कोई तरीका नहीं है।
लेप

मैं अपनी पिछली टिप्पणी के बारे में एक बिंदु को सही करना चाहूंगा: "उज्ज्वल" + रंग में "बोल्ड" शामिल है (कुछ रंग वास्तव में उज्जवल
दिखेंगे

मैंने उबंटू 18 पर यह कोशिश की और यह काम नहीं किया। सेटअप बहु-चरणीय है और निर्देश अस्पष्ट हैं। अभी भी अनिश्चित है कि मैं गलत हो गया है; अंतिम भाग स्पष्ट हो सकता है "इसके बाद आप किसी अन्य स्थान पर उदाहरण कॉन्फ़िगर फ़ाइलों की प्रतिलिपि और संपादन कर सकते हैं। मेरे पास ~ / .colortail /" में है
दाऊदजी

बस के साथ कोलोराटेल स्थापित करें, apt install colortailऔर इसे बिना संपादन के काम करना चाहिए ~ / .colortail / too।
कार्तिक एम

11

यह भी ध्यान दें कि यदि आप केवल एक मिलान रेगेक्स की तलाश करना चाहते हैं , तो GNU grep --colorकाम करेगा - बस इसके tailमाध्यम से अपने आउटपुट को पाइप करें ।


ओपी केवल आउटपुट को हाइलाइट करना चाहता था , न कि उसे फ़िल्टर करना। गैर-मिलान रेखाएँ नहीं दिखाएंगी ...
कोडर

3
यदि आप कहते हैं grep  -A9999  -B9999 regex, तो यह सभी पंक्तियों को दिखाएगा जब तक कि आपके पास एक पंक्ति में 10,000 गैर-मिलान लाइनें न हों। हरे रंग में GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVEREशब्द दिखाने के लिए कुछ का उपयोग करें SEVERE, पीले रंग में बाकी सभी लाइनें और हरे रंग में अन्य सभी (गैर-सेवर) लाइनें (9999 तक)।
G-Man

आपको अपने पाइप के आदेश के आधार पर --color=alwaysबस के बजाय grep को पारित करने की आवश्यकता हो सकती है --color, लेकिन हां, यह मेरे बॉक्स पर स्थापित पूंछ (GNU कोरुटिल्स) 8.27 पर काम करता है।
हांक शुल्त्

7

मानक कमांड जैसे रंगीन आउटपुट प्राप्त करने के लिए grep, आपको इसे aliasअपने में सेट करना चाहिए.bashrc

# User specific aliases and functions
alias grep='grep --color=auto'

जब आप अपनी फ़ाइल में कुछ जमा करते हैं तो आपको कुछ ऐसा दिखाई देता है, (लेकिन शायद लाल रंग में):

[root @ linuxbox mydir] # grep "\ (INFO \ | SEVERE \)" / var / log / logname
इस प्रविष्टि के एक है जानकारी  
गंभीर इस प्रविष्टि एक चेतावनी दी है!
इस प्रविष्टि के एक है जानकारी 
इस प्रविष्टि एक है जानकारी 
गंभीर इस प्रविष्टि एक चेतावनी दी है!

यदि आप उपयोग करना चाहते हैं tailया awkचाहते हैं कि रंग एक पाइप से बचे, तो उपनाम पर्याप्त नहीं है और आपको --color=alwaysपैरामीटर का उपयोग करना चाहिए , उदाहरण के लिए:

[root @ linubox mydir] # grep --color = हमेशा "\ (INFO \ | SEVERE \)" / var / log / logname | पूंछ -f | awk '{प्रिंट $ 1}'
इस 
गंभीर
इस
इस
गंभीर

यदि आप चाहते हैं awkकि कहानी के साथ रंग पाठ थोड़ा जटिल हो लेकिन अधिक शक्तिशाली हो, उदाहरण के लिए:

[root @ linubox mydir] # पूंछ -f / var / लॉग / संदेश | awk '{if ($ 5 ~ / INFO /) प्रिंट "\ 033 [1; 32m" $ 0 "\ 033 [0m"; अगर ($ 1 ~ / SEVERE /) प्रिंट "\ 033 [1; 31m" $ 0 "\ 033 [033"; और प्रिंट $ 0} '
यह प्रविष्टि एक जानकारी है,  
यह प्रविष्टि एक चेतावनी है!
यह एक और ENTRY है
यह प्रविष्टि एक जानकारी है
यह एक और ENTRY है
यह प्रविष्टि एक जानकारी है, 
यह प्रविष्टि एक चेतावनी है!

अपने रंग में प्रत्येक पंक्ति के साथ।

अन्य टूल के साथ शेल से रंगीन टेक्स्ट प्राप्त करने के कई अन्य तरीके हैं और उन्हें अन्य सदस्यों द्वारा अच्छी तरह से वर्णन किया गया है।



6

@UloBasEI उत्तर के आधार पर, मैंने उपयोग करने की कोशिश की है ... | perl ... | perl ..., लेकिन लिनक्स पाइप थोड़ा पागल हो गया है और बहुत धीमा है। अगर मैं सभी नियमों को केवल एक ही perlकमांड में रखता हूं , तो यह ठीक काम करता है।

उदाहरण के लिए, नीचे के रूप में एक perlफ़ाइल colorTail.pl बनाएँ :

#!/usr/bin/perl -w

while(<STDIN>) {
    my $line = $_;
    chomp($line);
    for($line){
        s/==>.*<==/\e[1;44m$&\e[0m/gi; #tail multiples files name in blue background
        s/.*exception.*|at .*/\e[0;31m$&\e[0m/gi;  #java errors & stacktraces in red
        s/info.*/\e[1;32m$&\e[0m/gi; #info replacement in green
        s/warning.*/\e[1;33m$&\e[0m/gi; #warning replacement in yellow
    }
    print $line, "\n";
}

इसे इस रूप में उपयोग करें:

tail -f *.log | perl colorTail.pl
tail -f *.log -f **/*.log | perl colorTail.pl

नोट: आप इसे MobaXTerm पर भी उपयोग कर सकते हैं ! बस MobaXTerm साइट perlसे प्लग-इन डाउनलोड करें ।


3
tail -f /var/log/logname | source-highlight -f esc -s log

7
source-highlightएक व्यापक रूप से स्थापित कमांड नहीं है, इसलिए आपको कम से कम प्रोजेक्ट साइट का लिंक देना चाहिए।
गाइल्स

फेडोरा 19 में उपलब्ध है।
sjas

और उबंटू 12.10।
sjas

यह अच्छा लगता है। इस सूची (26MB) में दूसरों की तुलना में इसका एक बड़ा पैकेज है। यह भाषाओं की एक विशाल सूची का समर्थन करता है। इसे /usr/share/source-highlight/*.lang (उबंटू): पर स्थित कॉन्फिग फाइलों को संशोधित करके अनुकूलित किया जा सकता है। यदि आपको कुछ सरल चाहिए, तो ccze या colortail के साथ जाएं।
लेप

ऐसा लगता है कि यह बढ़ावा देने पर निर्भर करता है, जो कि लगभग 462MB है
इकोस

3

एक समाधान जो सभी प्रकार के पाठ को रंगने के लिए काम करता है, न कि केवल लॉगफाइल्स , एक पायथन उपकरण है, ' कॉलआउट '।

pip install colout
myprocess | colout REGEX_WITH_GROUPS color1,color2... [attr1,attr2...]

जहां रेगेक्स के समूह 1 से मेल खाने वाले 'मायप्रोसेस' के आउटपुट में कोई भी टेक्स्ट कलर 1, ग्रुप 2 के साथ कलर 2, आदि के साथ रंगीन होगा।

उदाहरण के लिए:

tail -f /var/log/mylogfile | colout '^(\w+ \d+ [\d:]+)|(\w+\.py:\d+ .+\(\)): (.+)$' white,black,cyan bold,bold,normal

यानी पहला रेगेक्स समूह (पार्न्स) लॉगफाइल में प्रारंभिक तिथि से मेल खाता है, दूसरा समूह एक पायथन फाइलनाम, लाइन नंबर और फ़ंक्शन नाम से मेल खाता है, और तीसरा समूह लॉग संदेश से मेल खाता है जो उसके बाद आता है। ऐसा दिखता है:

रंगीन स्वरूपण के साथ logfile

ध्यान दें कि लाइनें या कुछ हिस्सों का जो मेरे रेगेक्स से मेल नहीं खाते हैं, अभी भी गूँज रहे हैं, इसलिए यह 'grep --color' जैसा नहीं है - आउटपुट से कुछ भी फ़िल्टर नहीं किया गया है।

जाहिर है कि यह काफी लचीला है कि आप इसे किसी भी प्रक्रिया के साथ उपयोग कर सकते हैं, न कि केवल लॉगफ़ाइल्स को पूंछने के लिए। मैं आमतौर पर किसी भी चीज को रंगीन करने के लिए किसी भी समय मक्खी पर एक नया रेगीक्स कोड़ा करता हूं। इस कारण से, मैं किसी भी कस्टम लॉगफाइल-कलरिंग टूल में कॉलआउट करना पसंद करता हूं, क्योंकि मुझे केवल एक टूल को सीखने की जरूरत है, चाहे जो भी मैं रंग रहा हूं: लॉगिंग, टेस्ट आउटपुट, टर्मिनल में कोड के स्निपेट हाइलाइटिंग आदि।


1
मैंने एक भी उत्तर नहीं देखा है जो स्रोत लॉग फ़ाइल को संशोधित करता है
Dani_l

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

2

बेशर्म प्लग: मैंने TxtStyle नाम का एक टूल लिखा है जो पहले बताए गए विकल्पों की तरह ही कुछ करता है। आप इसे निम्नानुसार चला सकते हैं:

tail -f /var/log/syslog | txts --regex '\d+'

आप कॉन्फ़िगर फ़ाइल में नाम शैलियों को परिभाषित कर सकते हैं ( ~/.txts.conf) और इसका उपयोग इस तरह करें:

ifconfig | txts --name ifconfig

( ifconfigशैली बॉक्स से बाहर परिभाषित की गई है)


1

मैंने एक बैश फ़ंक्शन लिखा है जो तीन मापदंडों तक स्वीकार करता है और एक टेक्स्ट फ़ाइल पर एक grep जैसा फ़िल्टर करता है, और टेक्स्ट को स्क्रीन पर रंग में आउटपुट करता है।

मैं एक टेल फ़ंक्शन भी देखना चाहूंगा जो यह करेगा, लेकिन अभी तक एक भी नहीं मिला है।

इस फ़ंक्शन को भी बेहतर बनाया जा सकता है - मैं इसे बेहतर बनाने के लिए किसी भी मदद की सराहना करता हूं।

function multigrep(){

    #THIS WORKS - Recreate this, using input parameters
    #sed -En '/(App)|(Spe)/p' ./flashlog.txt;

    filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt";
    paramString="";

    for element in "$@"
        do
            #echo $element;
            paramString="$paramString($element)|";
        done

    #TRIM FINAL | OFF PARAMSTRING
    paramString=${paramString:0:${#paramString}-1};

    #CREATE SED EXPRESSION - '/($1)|($2)|(...)/p'
    paramString="'/$paramString/p'";

    #CREATE SED FUNCTION, CALL ON FILE
    paramString="sed -En $paramString ./flashlog.txt"

    echo $paramString;
    echo "${txtbld}$(tput setaf 7)" > ./flashlog_output.txt;
    eval $paramString >> ./flashlog_output.txt;
    echo >> ./flashlog_output.txt;
    #cat ./flashlog_output.txt;

    cat ./flashlog_output.txt | while read LINE
    do

        [[  $1 && ${1-x} ]] && 
            if grep -q $1 <<<$LINE; then
                echo "$(tput setaf 3)$LINE"
            fi

        [[  $2 && ${2-x} ]] && 
            if grep -q $2 <<<$LINE; then
                echo "$(tput setaf 7)$LINE"
            fi


        [[  $3 && ${3-x} ]] && 
            if grep -q $3 <<<$LINE; then
                echo "$(tput setaf 6)$LINE"
            fi

    done
}

1

ज़रूर !

मैंने 8 रंग वेरिएबल्स की परिभाषाओं के आधार पर "गोइंग्रेपी" नामक एक फ़ंक्शन को लंबे समय तक लिखा। यह केवल "पूंछ-एफ" रंगीन फ़ंक्शन की तरह काम करता है।

1. सेटर्स

सबसे पहले, रंग चर समारोह को पहले बुलाया जाएगा:


setColors ()
{
set -a
which printf >/dev/null 2>&1 && print=printf || print=print # Mandriva doesn't know about printf

hide='eval tput civis'
show='eval tput cnorm'
CLS=$(tput clear)
bel=$(tput bel)

case ${UNAME} in
AIX)
# text / foreground
N=$(${print} '\033[1;30m')
n=$(${print} '\033[0;30m')
R=$(${print} '\033[1;31m')
r=$(${print} '\033[0;31m')
G=$(${print} '\033[1;32m')
g=$(${print} '\033[0;32m')
Y=$(${print} '\033[1;33m')
y=$(${print} '\033[0;33m')
B=$(${print} '\033[1;34m')
b=$(${print} '\033[0;34m')
M=$(${print} '\033[1;35m')
m=$(${print} '\033[0;35m')
C=$(${print} '\033[1;36m')
c=$(${print} '\033[0;36m')
W=$(${print} '\033[1;37m')
w=$(${print} '\033[0;37m')
END=$(${print} '\033[0m')

# background
RN=$(${print} '\033[6;40m')
Rn=$(${print} '\033[40m')
RR=$(${print} '\033[6;41m')
Rr=$(${print} '\033[41m')
RG=$(${print} '\033[6;42m')
Rg=$(${print} '\033[42m')
RY=$(${print} '\033[6;43m')
Ry=$(${print} '\033[43m')
RB=$(${print} '\033[6;44m')
Rb=$(${print} '\033[44m')
RM=$(${print} '\033[6;45m')
Rm=$(${print} '\033[45m')
RC=$(${print} '\033[6;46m')
Rc=$(${print} '\033[46m')
RW=$(${print} '\033[6;47m')
Rw=$(${print} '\033[47m')

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)
;;
*)
# text / foreground
n=$(tput setaf 0)
r=$(tput setaf 1)
g=$(tput setaf 2)
y=$(tput setaf 3)
b=$(tput setaf 4)
m=$(tput setaf 5)
c=$(tput setaf 6)
w=$(tput setaf 7)
N=$(tput setaf 8)
R=$(tput setaf 9)
G=$(tput setaf 10)
Y=$(tput setaf 11)
B=$(tput setaf 12)
M=$(tput setaf 13)
C=$(tput setaf 14)
W=$(tput setaf 15)
END=$(tput sgr0)

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)

# background
Rn=$(tput setab 0)
Rr=$(tput setab 1)
Rg=$(tput setab 2)
Ry=$(tput setab 3)
Rb=$(tput setab 4)
Rm=$(tput setab 5)
Rc=$(tput setab 6)
Rw=$(tput setab 7)
RN=$(tput setab 8)
RR=$(tput setab 9)
RG=$(tput setab 10)
RY=$(tput setab 11)
RB=$(tput setab 12)
RM=$(tput setab 13)
RC=$(tput setab 14)
RW=$(tput setab 15)
;;
esac

BLUEf=${B}
BLUE=${b}
REDf=${R}
RED=${r}
GREENf=${G}
GREEN=${g}
YELLOWf=${Y}
YELLOW=${y}
MANGENTAf=${M}
MANGENTA=${m}
WHITEf=${W}
WHITE=${w}
CYANf=${C}
CYAN=${c}

OK="${RG}${n}OK${END}"
KO="${RR}${n}KO${END}"
NA="${N}NA${END}"

COLORIZE='eval sed -e "s/{END}/${END}/g" -e "s/{HIGH}/${HIGH}/g" -e "s/{SMUL}/${SMUL}/g" -e "s/{RMUL}/${RMUL}/g" -e "s/{BLINK}/${BLINK}/g" -e "s/{REVERSE}/${REVERSE}/g" -e "s/{REVERSO}/${REVERSO}/g"'
LOWS=' -e "s/{n}/${n}/g" -e "s/{r}/${r}/g" -e "s/{g}/${g}/g" -e "s/{y}/${y}/g" -e "s/{b}/${b}/g" -e "s/{m}/${m}/g" -e "s/{c}/${c}/g" -e "s/{w}/${w}/g"'
HIGHS=' -e "s/{N}/${N}/g" -e "s/{R}/${R}/g" -e "s/{G}/${G}/g" -e "s/{Y}/${Y}/g" -e "s/{B}/${B}/g" -e "s/{M}/${M}/g" -e "s/{C}/${C}/g" -e "s/{W}/${W}/g"'
REVLOWS=' -e "s/{Rn}/${Rn}/g" -e "s/{Rr}/${Rr}/g" -e "s/{Rg}/${Rg}/g" -e "s/{Ry}/${Ry}/g" -e "s/{Rb}/${Rb}/g" -e "s/{Rm}/${Rm}/g" -e "s/{Rc}/${Rc}/g" -e "s/{Rw}/${Rw}/g"'
REVHIGHS=' -e "s/{RN}/${RN}/g" -e "s/{RR}/${RR}/g" -e "s/{RG}/${RG}/g" -e "s/{RY}/${RY}/g" -e "s/{RB}/${RB}/g" -e "s/{RM}/${RM}/g" -e "s/{RC}/${RC}/g" -e "s/{RW}/${RW}/g"'
# COLORIZE Usage:
# command |${COLORIZE} ${LOWS} ${HIGHS} ${REVLOWS} ${REVHIGHS}

set +a
}

2. अहंकारी

और egrepi फ़ंक्शन, प्रभावी और सुरुचिपूर्ण: 8 या अधिक रंगों (आपकी ज़रूरतों) के बीच रंग साइकिल चलाना और टिप्पणियों के साथ 3 अलग-अलग यूनिक्स ओएस के तहत परीक्षण किया गया:


# egrepi() egrep with 8 REVERSE cyclic colorations on regexps almost like egrep
# egrepi 
# current script will work for KSH88, KSH93, bash 2+, zsh, under AIX / Linux / SunOS
egrepi ()
{
args=$*
# colorList=wBcgymrN                                                # KSH93 or bash 3+, not for AIX
# set -A color                                                  # needed with older sh
color[0]=$Rw; color[1]=$RB; color[2]=$Rc; color[3]=$Rg; color[4]=$Ry; color[5]=$Rm; color[6]=$Rr; color[7]=$RN; # this is the only one AIX solution
i=0
unset argsToGrep argsSedColor argsPerlColor

for arg in ${args}
do
    [ "${arg}" == "." ] && arg=\\.                              # if you wanna grep "."
    # color=R${colorList:((${RANDOM: -1:1})):1}                     # bash RANDOMized colors
    # color=R${colorList:$i:1} && let i++ && ((i==8)) && i=0                # KSH93 or bash 3+, not for AIX
    argsToGrep="${argsToGrep}${argsToGrep:+|}${arg}"
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${!color}&${w}#gI"            # AIX KSH88 do not recognise this fucking variable double expansion
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${color[$i]}&${w}#gI"         # AIX neither do include sed with Ignore case
    argsPerlColor="${argsPerlColor}${argsPerlColor:+,}s#${arg}#$n${color[$i]}$&${END}#gi"   # So: gotta use perl
    let i+=1 && ((i==8)) && i=0                             # AIX KSH88 do not recognise "let i++"
done
# egrep -i "${argsToGrep}" | sed ${argsSedColor} | egrep -v "grep|sed"              # AIX sed incompatibility with Ignore case
# (($# > 0)) && (egrep -i "${argsToGrep}" | perl -p -e ${argsPerlColor}) || cat         # this line colors & grep the words, will NOT act as "tail -f"
(($# > 0)) && (perl -p -e ${argsPerlColor}) || cat                      # this line just colors the words
}

3. उपयोग

कमान | egrepi word1 .. wordN



1

यकीन के लिए grc!

फ़ाइल में regex के साथ अपने कॉलर को अनुकूलित करें: ~ .grc / conf.tail (या जो भी नाम आप चाहते हैं)

regexp=.*(select .*)$
colours=unchanged,cyan
=====
regexp=.*(update .*)$
colours=unchanged,bold yellow
=====
regexp=.*(insert .*)$
colours=unchanged,bold yellow
=====
regexp=.*(emp=\d+).*
colours=unchanged,reverse green
=====
regexp=.*http.*/rest/contahub.cmds.(.*?)/(\w*).*$
colours=unchanged,green,magenta
=====
regexp=.*http.*/M/.*\.(.*?Facade)/(\w*).*$
colours=unchanged,underline green,underline magenta

कमांड लाइन:

grc -c conf.tail tail -f log/tomcat/catalina.out

परिणाम: स्क्रीनशॉट

grc कॉन्फ़िगर करने के लिए जानकारी: https://github.com/manjuraj/config/blob/master/.grc/sample.conf


1

रंग कोड के लिए, मैं tput का उपयोग करेगा:

red=$( tput -Txterm setaf 1 )
norm=$( tput -Txterm sgr0 )
bold=$( tput -Txterm bold )

संदर्भ के लिए देखें: man tput

फिर:

tail -F myfile.log | sed "s/\(.ERROR.*\)/$red$bold\1$norm/g"

बहुत धन्यवाद। मानक शेल फ़ंक्शन के साथ एक आकर्षण की तरह काम करता है।
vquintans

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