Как заставить tail -f показывать цветной вывод

265

Я хотел бы иметь возможность отслеживать вывод файла журнала сервера, который имеет такие сообщения:

INFO
SEVERE

и т.д., и если это так SEVERE, покажите линию красным цветом; если это INFO, зеленым цветом. Какой псевдоним можно настроить для tailкоманды, которая поможет мне сделать это?

Амир Афганский
источник
одна строка sed: stackoverflow.com/a/14691971/52074
Тревор Бойд Смит,

Ответы:

235

Попробуйте мультитейл . Это ü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"}
'

или с седом

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его буквальным escape-символом и удалите --unbuffered.

Еще одна возможность - запустить tail -fв буфере оболочки Emacs и использовать возможности окраски синтаксиса Emacs.

жилль
источник
как вы можете сделать это с sed? (извините за то, что ленился и сам не понял это!) Но не могли бы вы добавить sedпример.
Али
5
@Ali Sed менее удобен, потому что у него нет синтаксиса для escape-символа, вы должны буквально включить его в сценарий или использовать метод цитирования оболочки для его работы. Я рекомендую использовать awk.
Жиль
8
@ Жиль В вашем tail -fс awkкодом, если строка не имеет INFO и SEVERE , строка не будет напечатана. Как я могу распечатать оставшиеся строки? (Строка не должна быть цветной)
Бенджамин
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/'
Дмитрий Сандалов
121

GRC , универсальный колоризатор довольно крутой.

apt-get install grc

Просто сделать

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

и наслаждаться!

Вы также найдете его на GitHub .

thias
источник
2
Это именно то, что мне нужно: легкий и простой. Раскраска не совсем подходит для моих типов журналов (пользовательских журналов), но любая раскраска позволяет мне следить за журналом.
Реннат
Для меня 'grc' из-за ошибок Debian: OSError: [Errno 13] Разрешение отклонено. Кроме того, это зависит от установленного Python, поэтому он не очень легкий, если у вас его нет. Я нашел, что 'ccze' работает намного лучше, напр. 'tail -f -n 50 /var/log/starbound-server.log | ccze -A '.
Даниэль Соколовский
1
Настройки по умолчанию grc в Ubuntu не отображались как хорошие для системных журналов или mail.log. Нелегко понять, как его настроить.
Лепе
1
Я нашел это более быстрый и простой способ раскрашивания, чем мультитейл. Просто сделал быструю установку через источник на моей системе CentOS и обновил мою жизнь. Будет установлен на других моих системах тоже.
Зеешан
4
Это выглядит довольно ужасно на логах nginx i.imgur.com/aJbIOfL.png
mpen
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Восстанавливает нормальный цвет текста.

uloBasEI
источник
1
Это не работает на Mac - я голосую за него, потому что он работает на Linux.
Амир Афган
Upvoting, потому что в то время как трюк perl / ansi не может, ccze делает.
Шадур
1
Вы также можете сделать свой терминал послать предупреждение или «гудок», добавив \007к концу регулярного выражения, например: perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Это работает замечательно, если вы используете tmux с set -g bell-action any, и в этом случае, если у вас есть журнал в другом окне, это имя окна будет предупреждать всякий раз, когда регулярное выражение находит совпадение.
Jonyamo
@AmirAfghani Это сайт SE Linux, Unix, поэтому я не уверен, почему вы думали, что он будет работать на Mac.
BЈовић
1
@ BЈовић Mac - это Unix.
Крис Даун
34

Взгляните на lnav , расширенный просмотрщик файлов журнала.

LNAV LNAV

Это может также довольно печатать различные форматы.

До:

LNAV-перед тем, довольно

После:

LNAV некрасиво

bagonyi
источник
Действительно классное дополнение к набору инструментов анализа логов. Спасибо за предложение.
Патрик Алиен
24

Вы можете использовать радугу , которая окрашивает линии на основе регулярных выражений:

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

Он также поставляется в комплекте с предопределенными конфигурациями , например, для журналов Tomcat:

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

(отказ от ответственности: я автор)

nicoulaj
источник
2
Я попробовал большинство других решений, предложенных для этого вопроса, но Rainbow была единственной, которая одинаково хорошо работала на sun, aix, linux, termux, darwin и cygwin - 6 (!) Средах, которые я использую ежедневно. Все остальные включали сложные непереносимые процессы сборки, по крайней мере, для некоторых платформ.
Конюшня
1
rainbowявляется удивительным. Вы автор? Если это так, пожалуйста, отредактируйте свой ответ с указанием авторства.
епископ
да, извините, отредактировано
nicoulaj
15

Вы можете использовать colortail :

colortail -f /var/log/messages
Картик М
источник
2
+1 доступно в репозиториях Ubuntu. Что мне больше нравится в colortail по сравнению с ccze, так это то, что вы можете свободно настраивать свои шаблоны с помощью RegEx. Доступные цвета: черный, ярко-черный, белый, ярко-белый, пурпурный, ярко-пурпурный, голубой, ярко-голубой, зеленый, ярко-зеленый, желтый, ярко-желтый, красный, ярко-синий, синий, ярко-синий. К сожалению, нет возможности установить жирный или другие цвета, такие как оранжевый.
Лепе
Я хотел бы исправить одно замечание по поводу моего предыдущего комментария: «яркий» + цвет включает «жирный» (некоторые цвета на самом деле также будут выглядеть ярче)
lepe
Я попробовал это на Ubuntu 18, и это не сработало. Установка многоступенчатая, а инструкции неоднозначны. Все еще не уверены, что это та часть, в которой я ошибся; последняя часть может проясниться «После этого вы можете скопировать и отредактировать файлы конфигурации примера в другое место. У меня они есть в ~ / .colortail /»
Давуджи
Просто установите colortail с помощью, apt install colortailи он должен работать без редактирования ~ / .colortail /.
Картик М
11

Также обратите внимание, что если вы просто хотите найти одно соответствующее регулярное выражение, GNU grep with --colorбудет работать - просто передайте tailчерез него свой вывод.

mattdm
источник
ОП хотел только выделить результат, а не отфильтровать его. Grep не будет отображать несовпадающие строки ...
Coderer
3
Если вы скажете grep  -A9999  -B9999 regex, он покажет все строки, если у вас нет 10 000 несовпадающих строк подряд. Используйте что-то вроде, GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVEREчтобы показать слово SEVEREкрасным, остальные строки SEVERE - желтым, а все остальные (не SEVERE) строки (до 9999) - зеленым.
G-Man
Возможно, вам придется перейти --color=alwaysна grep, а не просто --color, в зависимости от порядка вашего канала, но да, это работает хвост (GNU coreutils) 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
эта запись является ИНФОРМАЦИЕЙ  
СЕРЬЕЗНОЙ, эта запись является предупреждением!
эта запись является INFO 
эта запись является INFO 
SEVERE эта запись является предупреждением!

Если вы хотите использовать tailили awkи хотите, чтобы цвет сохранился в трубе, то псевдонима недостаточно, и вы должны использовать --color=alwaysпараметр, например:

[root @ linubox mydir] # grep --color = всегда "\ (INFO \ | SEVERE \)" / var / log / logname | хвост -f | awk '{print $ 1}'
это 
СУРОВЫЙ
это
это
СУРОВЫЙ

Если вы хотите, чтобы цветной текст с awkисторией был немного сложным, но более мощным, например:

[root @ linubox mydir] # tail -f / var / log / messages | awk '{if ($ 5 ~ / INFO /) print "\ 033 [1; 32m" $ 0 "\ 033 [0m"; иначе if ($ 1 ~ / SEVERE /) print "\ 033 [1; 31m" $ 0 "\ 033 [0m"; иначе выведите $ 0} '
эта запись является ИНФОРМАЦИЕЙ  
СЕРЬЕЗНОЙ, эта запись является предупреждением!
это еще один вход
эта запись является ИНФО
это еще один вход
эта запись является ИНФОРМАЦИЕЙ 
СЕРЬЕЗНОЙ, эта запись является предупреждением!

с каждой линией в своем собственном цвете.

Есть много других способов получить цветной текст из оболочки с помощью других инструментов, и они хорошо описаны другими участниками.

tombolinux
источник
7

Мне очень нравится колорекс . Просто, но сытно.

tail -f /var/log/syslog | colorex -G '[0-9]{2}:[0-9]{2}:[0-9]{2}' -b $(hostname)
Брайан М. Хант
источник
12
как это просто?
Элиран Малка
6

Основываясь на ответе @uloBasEI, я пытался использовать ... | perl ... | perl ..., но Linux pipe немного сумасшедший и слишком медленный. Если я добавлю все правила только в одну 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 ! Просто скачайте perlплагин с сайта MobaXTerm .

surfealokesea
источник
3
tail -f /var/log/logname | source-highlight -f esc -s log

источник
7
source-highlightне является широко установленной командой, поэтому вы должны хотя бы дать ссылку на сайт проекта.
Жиль
Доступно в Fedora 19.
Sjas
И Ubuntu 12.10.
Sjas
Это выглядит мило. Это большой пакет по сравнению с другими в этом списке (26 МБ). Поддерживает огромный список языков. Его можно настроить, изменив конфигурационные файлы, расположенные по адресу: /usr/share/source-highlight/*.lang (Ubuntu). Если вам нужно что-то простое, используйте ccze или colortail.
Лепе
похоже, это зависит от наддува, который составляет около 462 МБ
ecsos
3

Одним из решений, которое работает для окрашивания всех видов текста, а не только файлов журналов, является инструмент Python ' colout '.

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

Где любой текст в выводе «myprocess», который соответствует группе 1 регулярного выражения, будет окрашен в color1, группа 2 в color2 и т. Д.

Например:

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

т.е. первая группа регулярных выражений (parens) соответствует начальной дате в файле журнала, вторая группа соответствует имени файла python, номеру строки и имени функции, а третья группа соответствует сообщению журнала, которое следует после этого. Это выглядит так:

лог-файл с цветным форматированием

Обратите внимание, что строки или части строк, которые не соответствуют ни одному из моих регулярных выражений, все еще отражаются, так что это не похоже на 'grep --color' - ничего не отфильтровывается из вывода.

Очевидно, что это достаточно гибко, так что вы можете использовать его с любым процессом, а не только с файлами журналов. Обычно я просто запускаю новое регулярное выражение на лету, когда хочу что-то раскрасить. По этой причине я предпочитаю colout любому пользовательскому инструменту окраски лог-файлов, потому что мне нужно изучить только один инструмент, независимо от того, что я раскрашиваю: ведение журнала, вывод теста, выделение синтаксиса фрагментов кода в терминале и т. Д.

Джонатан Хартли
источник
1
Я не видел ни одного ответа, который бы
изменял
@Dani_l Ты прав! В то время, когда я писал это, я, должно быть, путал себя, переключаясь между этим и аналогичным вопросом, на который многие ответы были о том, как настроить ведение журнала таким образом, чтобы символы ANSI были записаны непосредственно в сам файл журнала. Я удалю эту жалобу из своего ответа.
Джонатан Хартли
2

Бесстыдный плагин: я написал инструмент под названием TxtStyle, который делает нечто похожее на опции, упомянутые ранее. Вы можете запустить его следующим образом:

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

Вы также можете определить именованные стили в файле конфигурации ( ~/.txts.conf) и использовать его следующим образом:

ifconfig | txts --name ifconfig

( ifconfigстиль определяется из коробки)

armandino
источник
2

GRC точно!

настройте ваши сборщики с помощью регулярных выражений в файле: ~ .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

Я написал функцию bash, которая принимает до трех параметров и выполняет 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

конечно !

Я долго писал функцию «egrepi», основанную на 8 определениях цветовых переменных. Это работает ТОЛЬКО в виде цветной функции "tail -f".

1. setColors

во-первых, сначала нужно вызвать функцию цветовых переменных:


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 разными ОС Unix с комментариями:


# 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. Использование

команда | эгрепи слово1 .. словоN

мусорщик
источник
1

Вы также можете взглянуть на lwatch :

tail -f /var/log/syslog | lwatch --input -

Майкл Крупп
источник
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"
Fabien Bouleau
источник
Большое спасибо. Работает как шарм со стандартными функциями оболочки.
vquintans
0

Некоторое время назад публикует утилиту Node Js - log-color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
gliviu
источник