Kuyruk nasıl -f renkli çıktı göstermek


Yanıtlar:


234

Multitail'i deneyin . Bu bir übergeneralizasyondur tail -f. Birden fazla dosyayı ayrı pencerelerde izleyebilir, içeriğine göre satırları vurgulayabilir ve diğer işlemleri yapabilirsiniz.

multitail -c /path/to/log

Renkler yapılandırılabilir. Varsayılan renk düzeni sizin için işe yaramazsa, config dosyasına kendinizinkini yazın. Örneğin multitail -cS amir_log /path/to/log, aşağıdakileri arayın ~/.multitailrc:

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

Standart olmayan araçları kurmanın sakıncalı olduğu bir sunucudaysanız , tail -frenk seçimi kontrol dizileri eklemek için sed veya awk ile birleştirmektir . Bu tail -f, standart çıktısı bir boru olsa bile standart çıktısını gecikmeden temizlemeyi gerektirir , tüm uygulamaların bunu yapıp yapmadığını bilmiyorum.

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

veya sed ile

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

Sed'iniz GNU sed değilse, \o033değişmez bir kaçış karakteriyle değiştirin ve kaldırın --unbuffered.

Yine bir başka olasılık, tail -fbir Emacs kabuk tamponunda çalıştırmak ve Emacs'in sözdizimi renklendirme yeteneklerini kullanmaktır.


bunu nasıl yapabilirsin sed? (Tembel olduğum için ve kendim çözemediğim için üzgünüm!) Ama lütfen bir sedörnek de ekler misiniz ?
Ali

5
@Ali Sed daha az kullanışlıdır çünkü kaçış karakteri için bir sözdizimine sahip değildir, tam anlamıyla komut dosyasında olması veya içinde çalışabilmesi için bir kabuk alıntı yöntemi kullanmanız gerekir. Awk kullanmanızı öneririz.
Gilles

8
Senin içinde @Gilles tail -file awkbir dize yoksa kod, INFO ve AĞIR , dize basılacak değildir. Kalan dizeleri de nasıl yazdırabilirim ? (
Benjamin

6
@Benjamin ; nextDaha sonraki işlemleri ve 1 {print}sonunda yeni bir işleme hattını atlamak için kapanış parantezlerinden önce ekleyin ( 1daima anlamına gelir).
Gilles

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/'
DmitrySandalov

120

grc , genel renklendirici oldukça serin.

apt-get install grc

Sadece yap

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

ve keyfini çıkarın!

Ayrıca GitHub'da da bulacaksınız .


2
Bu tam ihtiyacım olan şeydi: hafif ve basit. Renklendirme, günlüklerim (özel günlükler) için tam olarak doğru değil, ancak herhangi bir renklendirme günlükleri takip etmemi kolaylaştırıyor.
rennat

Benim için Debian ile ilgili 'grc' hataları: OSError: [Errno 13] İzin reddedildi. Ayrıca, yüklü olan Python'a da bağlıdır, bu yüzden zaten sahip olmadığınız sürece nispeten hafif değildir. Daha iyi çalışmak için 'ccze'yi buldum, eski. 'tail -f -n 50 /var/log/starbound-server.log | ccze -A '.
Daniel Sokolowski

1
Ubuntu'daki grc varsayılan ayarları syslogs veya mail.log için hoş görünmedi. Nasıl özelleştireceğinizi anlamak kolay değil.
lepe,

1
Renklendirmenin multitail'den daha hızlı ve kolay bir yolunu buldum. CentOS sistemime kaynak üzerinden hızlı bir kurulum yaptım ve hayatımı yükselttim. Diğer sistemlerime de yükleyeceğim.
zeeshan

4
Bu, nginx günlüklerinde oldukça korkunç görünüyor i.imgur.com/aJbIOfL.png
mpen

51

Eğer bir göz oldu mu ccze ? Seçeneği kullanarak -cveya doğrudan yapılandırma dosyanızdaki bazı anahtar kelimelerin varsayılan renklerini kişiselleştirme olanağınız vardır . Ekranınız renklendirmeden sonra temizleniyorsa, seçeneği kullanmalısınız -A.

Düzenle:

Tüm çizginin gerçekten kırmızı renkte olmasını istiyorsanız, aşağıdakileri de deneyebilirsiniz:

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

\e[1;31msana kırmızı rengi vereceğim. Biraz sarı isterseniz, kullanın \e[1;33mve yeşil kullanın \e[1;32m. \e[0mNormal metin rengini geri yükler.


1
Bu Mac'te çalışmaz - Linux'ta çalıştığı için onu büyütüyorum.
Amir Afgan

Perv / ansi hilesi olmasa da, ccze bunu yaparken olumlu.
Shadur

1
Ayrıca, terminal ekleyerek uyarısını veya "bip" gönderme yapabilir \007şöyle, regex sonuna: perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Eğer tmux kullanıyorsanız bu harika çalışıyor set -g bell-action any, bu durumda logunuzu başka bir pencerede takip ediyorsanız, regex bir eşleşme bulduğunda bu pencere adı sizi uyaracaktır.
jonyamo

@AmirAfghani Bu bir linux / unix SE sitesidir, bu yüzden neden mac üzerinde çalışacağını düşündüğünüzden emin değilim.
BЈовић

1
@ BЈовић Mac bir Unix.
Chris Down

34

Gelişmiş günlük dosyası görüntüleyicisi olan lnav'a bir göz atın .

LNAV LNAV

Ayrıca çeşitli formatları da basabilir.

Önce:

LNAV-öncesi-tatlı

Sonra:

LNAV-tatlı


Günlük analiz aracı kitine gerçekten harika bir ek. Önerin için teşekkürler.
Patrik Alienus

24

Normal ifadelere dayanarak çizgileri renklendiren gökkuşağı kullanabilirsiniz :

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

Ayrıca, önceden tanımlanmış yapılandırmalarla birlikte gelir , örneğin Tomcat günlükleri için:

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

(feragatname: Ben yazarım)


2
Bu soruya sunulan diğer çözümlerin çoğunu denedim, ancak günlük olarak kullandığım 6 (!) Ortamlarda güneş, aix, linux, termux, darwin ve cygwin'de eşit derecede çalışan tek kişi gökkuşağıydı. Diğerleri, en azından bazı platformlar için taşınabilir olmayan zorlu inşa işlemleriyle ilgiliydi.
Stabledog

1
rainbowharika. Yazar sen misin Öyleyse, lütfen cevabınızı bu özellikle düzenleyin.
piskopos

evet, üzgünüm, düzenlendi
nicoulaj

15

Colortail kullanabilirsiniz :

colortail -f /var/log/messages

2
Ubuntu depolarında +1 mevcuttur. Cctail'e kıyasla colortail'den hoşlandığım şey, RegEx'i kullanarak kalıplarınızı özgürce özelleştirebilmeniz. Mevcut renkler: siyah, parlak siyah, beyaz, parlak beyaz, macenta, açık mavi, mavi, açık yeşil, yeşil, açık yeşil, sarı, parlak, kırmızı, açık, mavi, açık mavi. Ne yazık ki, koyu veya turuncu gibi diğer renkleri ayarlamanın bir yolu yoktur.
lepe

Önceki yorumumla ilgili bir noktayı düzeltmek istiyorum: "parlak" + renk "kalın" içeriyor (bazı renkler aslında daha da parlak görünecek)
lepe

Bunu Ubuntu 18'de denedim ve işe yaramadı. Kurulum çok adımlıdır ve talimatlar belirsizdir. Yine de yanlış anladığım kısım olduğundan emin değilim; son kısım daha netleşebilir "Bundan sonra örnek yapılandırma dosyalarını başka bir yere kopyalamak ve düzenlemek isteyebilirsiniz. Onları ~ / .colortail /" olarak bulabilirsiniz
Dawoodjee

Sadece colortail'i yükleyin apt install colortailve ~ / .colortail / komutunu düzenlemeden de çalışması gerekir.
Kartik M

11

Dikkat edilmesi gereken sadece bakmak isterseniz bir ile eşleşen regex, GNU grep --colorirade çalışması - sadece boru senin tailo içinden çıktı.


OP sadece filtreyi değil çıkışı vurgulamak istedi . Grep eşleşmeyen çizgileri göstermeyecek ...
Coderer

3
Eğer söylerseniz grep  -A9999  -B9999 regex, arka arkaya 10.000 eşleşmeyen çizginiz yoksa, tüm çizgileri gösterecektir. GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERESözcüğü SEVEREkırmızı, göstermek için kalan SEVERE çizgileri sarı renkle ve diğer tüm (SEVERE olmayan) çizgileri (en fazla 9999) yeşil renkle göstermek için bir şey kullanın .
G-Man

--color=alwaysBorunuzun --colorsırasına bağlı olarak, sadece yerine grep'e geçmeniz gerekebilir , ancak evet, bu kutuda yüklü kuyruk (GNU coreutils) 8.27.
Hank Schultz

7

Standart komutları gibi gelen renkli çıktısını almak için grep, bu belirlesin aliasiçinde senin.bashrc

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

Dosyanıza bir şey soktuğunuzda şöyle bir şey görürsünüz (ama muhtemelen kırmızı renkte):

[root @ linuxbox mydir] # grep "\ (INFO \ | SEVERE \)" / var / log / logname
bu giriş bir BİLGİ  
SEVERE bu giriş bir uyar!
bu giriş bir BILGI 
bu giriş bir BILGI 
SEVERE bu giriş uyardı!

kullanmak tailveya awkrengin bir boruya dayanmasını istiyorsanız, takma ad yeterli değildir ve --color=alwaysörneğin parametreyi kullanmalısınız :

[root @ linubox mydir] # grep --color = daima "\ (INFO \ | SEVERE \)" / var / log / logname | kuyruk-f | awk '{$ 1} yazdır
bu 
AĞIR
bu
bu
AĞIR

awkHikaye ile renkli metin istiyorsanız biraz karmaşık ama daha güçlü, örneğin:

[root @ linubox mydir] # kuyruk -f / var / log / messages | awk '{if ($ 5 ~ / INFO /) "\ 033 [1; 32m" $ 0 "\ 033 [0m"; aksi takdirde ($ 1 ~ / SEVERE /) "\ 033 [1; 31m" $ 0 "\ 033 [0m"; yoksa $ 0} 'yazdırabilir
bu giriş bir BİLGİ  
SEVERE bu giriş bir uyar!
bu başka bir GİRİŞ
bu giriş bir INFO
bu başka bir GİRİŞ
bu giriş bir BİLGİ 
SEVERE bu giriş bir uyar!

Her çizgi kendi renginde.

Renklendirilmiş metni kabuktan başka araçlarla elde etmenin birçok yolu vardır ve bunlar diğer üyeler tarafından iyi tanımlanmıştır.



6

@UloBasEI yanıtına dayanarak kullanmaya çalıştım ... | perl ... | perl ..., ancak Linux borusu biraz çılgına döndü ve çok yavaş. Tüm kuralları tek bir perlkomutla koyarsam , iyi çalışır.

Örneğin, colorTail.plperl dosyasını aşağıdaki gibi oluşturun :

#!/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";
}

Olarak kullan:

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

NOT: MobaXTerm üzerinde de kullanabilirsiniz ! Sadece perleklentiyi MobaXTerm sitesinden indirin.


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

7
source-highlightyaygın olarak yüklenen bir komut değildir, bu yüzden en azından proje sitesine bir link vermelisiniz.
Gilles

Fedora 19'da mevcut -
sjas 29:13

Ve Ubuntu 12.10.
sjas 29:13

Güzel gözüküyor. Bu listedeki diğerlerine kıyasla büyük bir paket (26MB). Çok sayıda dil listesini destekler. /Usr/share/source-highlight/*.lang (Ubuntu) adresinde bulunan config dosyalarını değiştirerek özelleştirilebilir. Basit bir şeye ihtiyacınız varsa, ccze veya colortail ile gidin.
lepe

yaklaşık 462 MB olan artmaya bağlı görünüyor
ecsos

3

Yalnızca günlük dosyalarını değil, her türlü metni renklendirmeye yarayan çözümlerden biri de bir Python aracı olan ' colout '.

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

Regex'in 1. grubuna uyan 'myprocess' çıktısındaki herhangi bir metnin 1. renkli, 1. renkli 2., vb.

Örneğin:

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

yani ilk regex grubu (parens) logfile'deki ilk tarihle eşleşir, ikinci grup bir python dosya adı, satır numarası ve işlev adıyla eşleşir ve üçüncü grup bundan sonra gelen log mesajıyla eşleşir. Bu gibi görünüyor:

renkli biçimlendirmeli logfile

Regex'imin hiçbiriyle eşleşmeyen satırların veya satır bölümlerinin hala yankılandığını unutmayın, bu nedenle bu 'grep --color' gibi değil - çıktıdan hiçbir şey süzülmez.

Açıkçası bu, sadece günlük dosyalarına bakmak yerine, herhangi bir işlemle kullanabileceğiniz kadar esnektir. Genellikle bir şeyi renklendirmek istediğimde anında yeni bir regex kırbaçlarım. Bu nedenle, herhangi bir özel logfile-boyama aracına renk vermeyi tercih ediyorum, çünkü ne renklendirdiğime bakılmaksızın yalnızca bir araç öğrenmem gerekiyor: günlüğe kaydetme, test çıktısı, terminaldeki kod parçacıklarının vurgulanması vb.


1
Kaynak günlük dosyasını değiştiren tek bir cevap görmedim
Dani_l

@Dani_l Haklısın! Bunu yazdığım sırada, cevapların çoğunun, ANSI karakterlerinin doğrudan günlük dosyasının içine yazılacağı şekilde, günlüğe kaydetmeyi nasıl yapılandıracağıyla ilgili olarak, bu ve benzer bir soru arasında ileri geri dönerek kafamı karıştırmış olmalıydım. Bu şikayeti cevabımdan sileceğim.
Jonathan Hartley

2

Utanmaz fiş: Daha önce belirtilen seçeneklere benzer bir şey yapan TxtStyle adlı bir araç yazdım . Aşağıdaki gibi çalıştırabilirsiniz:

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

Ayrıca config dosyasında ( ~/.txts.conf) adlandırılmış stilleri tanımlayabilir ve bu şekilde kullanabilirsiniz:

ifconfig | txts --name ifconfig

( ifconfigstil kutudan tanımlanır)


2

grc kesin!

koleksiyonerlerinizi dosyada regex ile özelleştirin: ~ .grc / conf.tail (veya istediğiniz adı)

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

Komut satırı:

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

Sonuçlar: ekran görüntüsü

grc yapılandırması için bilgi: https://github.com/manjuraj/config/blob/master/.grc/sample.conf


1

Üç parametreye kadar kabul eden ve bir metin dosyasına grep benzeri bir filtre uygulayan ve ekrana renkli metin çıktısı veren bir bash işlevi yazdım.

Ayrıca bunu yapacak, ancak henüz bir tane bulamayan bir kuyruk işlevi görmek isterim.

Bu fonksiyon da geliştirilebilir - daha iyi hale getirme konusunda herhangi bir yardım için minnettarım.

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

Elbette !

Uzun zamandır 8 renk değişkeni tanımına dayanarak "egrepi" adlı bir fonksiyon yazdım. Bu YALNIZCA renkli bir işlev "kuyruk-f" gibi borulanmış çalışır.

1. setColors

ilk önce renk değişkenleri ilk başta çağrılacak:


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

ve egrepi işlevi, etkili ve şık: 8 veya daha fazla renk arasında renk dönüşümü (ihtiyaçlarınız) VE 3 farklı unix işletim sistemi altında test edilmiş, yorumlarla:


# 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. kullanım

komut | egrepi kelime1 .. kelime-n



1

Renk kodları gelince, tput kullanırdım:

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

Referans için bakınız: man tput

Sonra:

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

Çok teşekkürler. Standart kabuk işlevlerine sahip bir cazibe gibi çalışır.
vquintans

0

Bir süre önce yayınlar Düğüm Js yardımcı programı - log-color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.