У меня есть программа, которая выдает вывод, stdout
как:
[OK] Something is ok
[OK] Something else is also ok
[FAIL] This does not look good
[FAIL] Neither does this
[OK] At least this is fine
Чтобы было легче обнаружить сбои в выводе, я хотел бы пометить вхождения ключевого слова FAIL
красным, не отбрасывая другие сообщения. Было бы хорошо, если бы я мог также выделить OK
ключевые слова зеленым :).
Выполнение канала to egrep --color FAIL
покажет только строки, где присутствует FAIL
ключевое слово.
grep
решения см. Unix.stackexchange.com/a/34322tail -f
иawk
волшебством я готов идти =)Ответы:
Основываясь на
manatwork
блестящем небольшом взломе «или ничего» в другом вопросе, я предлагаю это, который добавляет возможность получить два основных цвета:То есть, вы
grep
дважды запускаете выходной файл,GREP_COLORS
каждый раз с другой переменной окружения.Значение «01; 32» означает «жирный зеленый», а другое означает «жирный красный». См. Статью Википедии о кодах ANSI для получения дополнительных идей.
Увы, для этого требуется GNU grep версии 2.5.3 или выше. Более старые версии GNU grep поддерживали другой механизм раскраски, но в этих версиях есть ошибка, которая не позволяет вам использовать эту функцию в конвейере более одного раза. Grep BSD эмулирует более старый механизм окраски grep GNU, и он будет работать дважды в конвейере, но он кричит о "пустом подвыражении" из-за
manatwork
взлома.Вы можете удалить обратную косую черту в конце первых двух строк, чтобы сделать все это одной строкой. Я просто разделил это здесь для ясности и чтобы играть хорошо с форматом страницы SE.
источник
GREP_COLORS
множественное число. Он использует только старыйGREP_COLOR
метод, и этот метод содержит ошибку, которая мешает ему делать правильные вещи. Если вы измените команду для использованияGREP_COLOR=32
и тому подобное, она изменит цвет выделения только для первого совпадения. Если вы передадите результат через конвейер,hexdump -c
вы увидите, что добавление второйegrep
команды что-то делает, но это не разрешено ANSI. Итог: вы должны обновить,grep
чтобы заставить это работать правильно.GREP_COLOR
(единственную) ошибку, несмотря на то, что эта функция устарела после замены.Для этого вы можете использовать multitail или ccze, так как позволяют конфигам описывать регулярные выражения для сопоставления и цвета.
источник
Основываясь на ответе Уоррена Янга, я написал этот скрипт на Python, который делает то же самое более элегантно и с гораздо меньшим набором текста. Вот как вы должны использовать этот скрипт:
источник