LinuxForum.Fans
Тема

Как сделать вывод awk в красном цвете?

Автор: prostornet 12 сообщений 4033 просмотров
#371374

Ни как не могу понять, как сделать вывод awk в красном цвете

text
grep -i 'locked out' ${FILE} | awk '{if($2=='$DATE') {print $1 ,$2 ,$3 ,$8}; }' | sed ' s/\[//g ' | cut -d'@' -f1

P.S.:
при попытке оформить вот так

text
awk '{if($2=='$DATE') {print "\033[1;31m" $1 ,$2 ,$3 ,$8 "\033[0m"}; }' 

вывод следующего характера:

text
E1;31mMar 11 06:43:39 none
#371375

...и, казалось бы, при чём тут awk?
P.S. В вашей конструкции последняя команда, которая выводит в консоль — cut.
P.S.S. Покажите пример файла и опишите результат, которого хотите добиться.

#371377

Грепится лог файл.
После grep и awk имеет вот такой вид:

text
Mar 11 13:10:44 [iffadmin@domen.ru]
Mar 11 13:13:14 [shpat@domen.ru]
Mar 11 13:15:03 [filippov@domen.ru]
Mar 11 13:16:02 [none@domen.ru]
Mar 11 13:25:44 [arc@domen.ru]

и соответственно sed убирает скобки, а cut отрезает домен.

text
Mar 11 13:10:44 iffadmin
Mar 11 13:13:14 shpat
Mar 11 13:15:03 filippov
Mar 11 13:16:02 none
Mar 11 13:25:44 arc

Хотелось бы выводить имена красным цветом.

#371379

ИМХО, тут простых awk и sed недостаточно. Напишите скрипт-обертку, в котором нужные строки считываются строка за строкой в переменную, и уже эта переменная выводится через echo -e.

#371381
yars написал:
ИМХО, тут простых awk и sed недостаточно. Напишите скрипт-обертку, в котором нужные строки считываются строка за строкой в переменную, и уже эта переменная выводится через echo -e.

Думал об этом, но как это оформить пока опыта не хватает.
Можно наводочку. где подсмотреть?

#371386
text
Mar 11 13:10:44 [iffadmin@domen.ru]
Mar 11 13:13:14 [shpat@domen.ru]
Mar 11 13:15:03 [filippov@domen.ru]
Mar 11 13:16:02 [none@domen.ru]
Mar 11 13:25:44 [arc@domen.ru]

последний раз показываю:

[console]$ sed -r 's/(.*)\[([^@]+)(.*)\]/\1\x1B[41m\2\x1B[0m/' tmp/zz
Mar 11 13:10:44 iffadmin
Mar 11 13:13:14 shpat
Mar 11 13:15:03 filippov
Mar 11 13:16:02 none
Mar 11 13:25:44 arc
[/console]

#371387

"yars" написал:
тут простых awk и sed недостаточно.
да-да. Конечно. Без C# это не сделать.
#371411


последний раз показываю:

[console]$ sed -r 's/(.*)\[([^@]+)(.*)\]/\1\x1B[41m\2\x1B[0m/' tmp/zz
Mar 11 13:10:44 iffadmin
Mar 11 13:13:14 shpat
Mar 11 13:15:03 filippov
Mar 11 13:16:02 none
Mar 11 13:25:44 arc
[/console]

А можно поподробней разобрать конструкцию 's/(.*)\[([^@]+)(.*)\]/\1\x1B[41m\2\x1B[0m/'

#371455
"prostornet" написал:
s/(.*)\[([^@]+)(.*)\]/\1\x1B[41m\2\x1B[0m/

s/ замена

(.*) любые символы в любом количестве \1

\[ квадратная скобка

([^@]+) любые символы кроме @ количеством от 1 и больше \2


(.*) любые символы в любом количестве

\] квадратная скобка

/

\1 см. выше, сюда вставляется \1

\x1B[41m красный цвет фона

\2 сюда \2

\x1B[0m обычный цвет

/

#371666

Огромное спасибо.
Вот теперь понятно, что нашу строчку разобрали на три блока и выводим 1 и 2 блоки, а скобки за разбором остались.

#371700

"prostornet" написал:
на три блока и выводим 1 и 2 блоки
ну да. Причём третий блок можно скобками и не выделять, это для наглядности только.
Войдите или зарегистрируйтесь, чтобы ответить.