Як мати хвіст -f показати кольоровий вихід


265

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

INFO
SEVERE

тощо, і якщо є SEVERE, покажіть рядок червоним кольором; якщо є INFO, в зеленому. Який псевдонім я можу налаштувати для tailкоманди, яка допомогла б мені це зробити?


Відповіді:


234

Спробуйте багатоповерхівку . Це юбергенералізація 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з СЕД або 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.

Ще одна можливість полягає у запуску tail -fв буфері оболонки Emacs та використанні можливостей забарвлення синтаксису Emacs.


як ти можеш це зробити sed? (вибачте за те, що лінуєтесь і не зрозуміли це самі!) Але, будь ласка, додайте і sedприклад.
Алі

5
@Ali Sed є менш зручним, оскільки він не має синтаксису символу втечі, його потрібно мати буквально в сценарії або використовувати метод цитування оболонок, щоб опрацювати його. Рекомендую використовувати awk.
Жиль

8
@Gilles в вашому tail -fз awkкодом, якщо рядок не має INFO і ВАЖКА , рядок не друкується. Як я можу надрукувати залишкові рядки? (Рядок не потрібно кольоровим)
Бенджамін

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/'
Дмитро Сандалов

120

grc , загальний колоризатор досить крутий.

apt-get install grc

Просто роби

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

і насолоджуйтесь!

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


2
Це саме те, що мені було потрібно: легкий і простий. Забарвлення не зовсім підходить для моїх типів журналів (користувацькі журнали), але будь-яке забарвлення полегшує мені слідкувати за журналом.
rennat

Для мене 'grc' на Debian помилки з: OSError: [Errno 13] У дозволі відхилено. Крім того, це залежить від встановлення Python, тому він не дуже легкий, якщо у вас його вже немає. Я виявив, що "ccze" працює набагато краще, колишній. 'хвіст -f -n 50 /var/log/starbound-server.log | ccze -A '.
Даніель Соколовський

1
налаштування grc за замовчуванням в Ubuntu не відображалися приємно для syslogs або mail.log. Нелегко зрозуміти, як його налаштувати.
lepe

1
Я знайшов більш швидким і простішим способом розфарбовування, ніж багатоповерхівки. Просто зробив швидку установку через джерело на моїй системі CentOS і покращив моє життя. Буде встановлено і на інших моїх системах.
zeeshan

4
Це виглядає досить логічно в
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Відновлює нормальний колір тексту.


1
Це не працює на Mac - я підтримую це, оскільки він працює в Linux.
Амір Афгані

Поскарження, тому що, хоча хитрість perl / ansi не може, ccze робить.
Шадур

1
Ви також можете зробити свій термінал послати попередження або «гудок», додавши \007до кінця регулярного виразу, наприклад: perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Це чудово спрацьовує, якщо ви використовуєте tmux з set -g bell-action any, у цьому випадку, якщо у вас є запис журналу в іншому вікні, ім'я цього вікна буде попереджати кожного разу, коли регекс знайде збіг.
Джонямо

@AmirAfghani Це сайт Linux / unix SE, тому я не впевнений, чому ви думали, що це працюватиме на mac.
BЈоviћ

1
@ BЈович Mac - це Unix.
Кріс Даун

34

Погляньте на lnav , передовий переглядач файлів журналу.

lnav lnav

Він також може досить друкувати різні формати.

Перед:

lnav-перед-досить

Після:

lnav-гарненький


Дійсно класний додаток до набору інструментів для аналізу журналів. Дякую за пропозицію.
Патрік Алієн

24

Ви можете використовувати веселку , яка розфарбовує лінії на основі регулярних виразів:

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

Він також поставляється в комплекті з попередньо визначеними конфігураціями , наприклад для журналів Tomcat:

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

(відмова від відповідальності: я автор)


2
Я спробував більшість інших рішень, запропонованих на це питання, але веселка була єдиною, яка однаково добре працювала на sun, aix, linux, termux, darwin та cygwin - 6 (!) Середовищ, якими я користуюся щодня. Всі інші брали участь у складних процесах збирання портативних принаймні для хоча б деяких платформ.
Стабілег

1
rainbowдивним. Ви автор? Якщо так, будь ласка, відредагуйте свою відповідь цим атрибуцією.
єпископ

так, вибачте, відредаговано
nicoulaj

15

Ви можете використовувати колорит :

colortail -f /var/log/messages

2
+1 доступний у сховищах Ubuntu. Що мені подобається у colortail порівняно з ccze, це те, що ви можете вільно налаштувати свої візерунки за допомогою RegEx. Доступні кольори: чорний, яскраво-чорний, білий, яскраво-білий, пурпуровий, яскраво-червоний, блакитний, яскраво-зелений, ‌ яскраво-зелений, жовтий, яскраво-жовтий, червоний, яскравий, синій, яскравий. На жаль, немає способу встановити жирні або інші кольори, такі як помаранчевий.
lepe

Я хотів би виправити один момент щодо свого попереднього коментаря: "яскравий" + колір включає "жирний" (деякі кольори також будуть виглядати яскравіше)
лепе

Я спробував це на Ubuntu 18, і це не вийшло. Налаштування багатоступеневе, а інструкції неоднозначні. Досі не впевнений, що це частина, яку я помилився; остання частина може стати зрозумілішою "Після цього ви можете скопіювати та відредагувати прикладові конфігураційні файли в якесь інше місце. У мене вони є у ~ / .colortail /"
Dawoodjee

Просто встановіть colortail за допомогою, apt install colortailі він повинен працювати без редагування ~ / .colortail / теж.
Картик М

11

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


ОП хотів лише виділити вихід, а не фільтрувати його. Греп не показуватиме невідповідні рядки ...
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 "\ (ІНФОРМАЦІЯ | | СЕВЕР \)" / var / log / logname
цей запис - ІНФОРМАЦІЯ  
СЕВЕРИ цей запис попередження!
цей запис - ІНФО, 
цей запис - ІНФОРМАЦІЯ 
СЕВЕРИ цей запис є попередженням!

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

[root @ linubox mydir] # grep --color = завжди "\ (ІНФОРМАЦІЯ | | СЕВЕР \)" / var / log / logname | хвіст -f | awk '{print $ 1}'
це 
СЕВЕР
це
це
СЕВЕР

Якщо ви хочете, щоб кольоровий текст із awkісторією був трохи складнішим, але більш потужним, наприклад:

[root @ linubox mydir] # хвіст -f / var / log / messages | awk '{if ($ 5 ~ / INFO /) print "\ 033 [1; 32m" $ 0 "\ 033 [0m"; інше, якщо ($ 1 ~ / SEVERE /) надрукувати "\ 033 [1; 31m" $ 0 "\ 033 [0m"; інше надрукувати $ 0} '
цей запис - ІНФОРМАЦІЯ  
СЕВЕРИ цей запис є попередженням!
це черговий ВХІД
цей запис є ІНФО
це черговий ВХІД
цей запис - ІНФОРМАЦІЯ 
СЕВЕРИ цей запис є попередженням!

з кожним рядком у своєму кольорі.

Існує багато інших способів отримати кольоровий текст з оболонки за допомогою інших інструментів, і вони добре описані іншими учасниками.



6

На основі відповіді @uloBasEI, я намагався використовувати ... | perl ... | perl ..., але Linux Linux стає трохи божевільним і занадто повільним. Якщо я покладу всі правила лише в одну 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 .


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.
lepe

схоже, це залежить від підвищення, який становить близько 462 Мб
ecsos

3

Одне рішення, яке працює для фарбування різного роду тексту, а не лише журналів, - це інструмент Python, " colout ".

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

Де будь-який текст у висновку "myprocess", який відповідає групі 1 регулярного вираження, буде забарвлений кольором1, група 2 кольором2 тощо.

Наприклад:

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

тобто перша група регулярних виразів (паронів) відповідає початковій даті в логфайлі, друга група відповідає імені файлу python, номеру рядка та імені функції, а третя група відповідає повідомленню журналу, яке надходить після цього. Це виглядає так:

журнал файлів з кольоровим форматуванням

Зауважте, що рядки або частини рядків, які не відповідають жодному моєму регулярному вираженню, все ще перегукуються, тому це не схоже на "grep --color" - нічого не фільтрується з виводу.

Очевидно, що це досить гнучко, що ви можете використовувати його з будь-яким процесом, а не лише з тим, щоб зафіксувати журнали. Я, як правило, просто збиваю нову виразку на льоту, коли б я хотів щось забарвити. З цієї причини я віддаю перевагу розфарбуванню будь-якому користувальницькому інструменту забарвлення файлів, оскільки мені потрібно вивчити лише один інструмент, незалежно від того, що я забарвлюю: ведення журналів, тестовий вихід, виділення синтаксису, фрагменти коду в терміналі тощо.


1
Я не бачив жодної відповіді, яка змінює файл журналу джерела
Dani_l

@Dani_l Право ти! У той час, коли я це писав, я, мабуть, плутав себе, перегортаючи вперед і назад між цим та подібним запитанням, на яке багато відповідей стосувалися того, як налаштувати журнал таким чином, щоб символи ANSI були записані безпосередньо у сам файл журналу. Я видалю цю скаргу зі своєї відповіді.
Джонатан Хартлі

2

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

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

Ви також можете визначити названі стилі у конфігураційному файлі ( ~/.txts.conf) та використовувати його так:

ifconfig | txts --name ifconfig

( ifconfigстиль визначений поза полем)


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, яка приймає до трьох параметрів і робить фільтр, що нагадує греп, у текстовому файлі, і виводить текст на екран кольоровим.

Я також хотів би бачити хвостову функцію, яка б це зробила, але ще не знайшла.

Цю функцію можна також вдосконалити - я вдячний за будь-яку допомогу щодо її покращення.

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 змінних кольорів. Це працює ТІЛЬКИ трубопровідно, як кольорова функція "хвіст -f".

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 різних ОС 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. Використання

команда | egrepi word1 .. wordN



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

0

Публікує деякий час тому утиліта Node Js - log-color -light

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.