Я думаю, что вы ищете какой-то сценарий sed
, который будет окружать слова, которые вы выбираете с помощью ANSI Color escape-последовательностей. (hmm ... lemme look).
EDIT ОК, он получил:
Вот пример для вывода "Hello" в темно-красный:
echo -e "\033[31mHello\033[0m"
Что происходит? Прежде всего, я использую echo -e
, так что echo
не преобразует косые черты в экранные косые черты, а скорее читает escape-последовательность \033
как одиночный экранированный символ. На самом деле это всего лишь 33 восьмеричные, что составляет 27 (порядковый номер клавиши ESC).
Так что на самом деле отправляется на экран что-то вроде:
<ESC>[32mHello<ESC>[0m
Какой дисплей ANSI интерпретирует как «первый сделать команду 32m
, вывод„Hello“, а затем сделать команду 0m
.
В этом случае команда 32m
означает «установить цвет фона на 2», а цвет №2 темно-красный, «перо», используемое терминалом, теперь будет темно-красным. Это означает, что из этой точки вперед, весь текст, который будет отображаться на экране, будет dar k красный.
Когда мы закончим вывод текста, который должен быть красного цвета, мы хотим сбросить цвета, поэтому мы вызываем команду 0m
, которая сбрасывает цвета в нормальное состояние.
Для получения списка всех кодов эвакуации найдите [http://en.wikipedia.org/wiki/ANSI_escape_code Wikipedia] или просто зайдите в Google.
Итак, все, что вам нужно сделать, это заменить слова, которые вы выбрали, словами, окруженными цветами. Например, чтобы заменить слово «Feb» в /var/log/messages
, сделайте следующее:
tail /var/log/messages | sed -e "s/Feb/\\o033[31m&\\o033[0m/"
(Вы, возможно, придется сделать это как корень на самом деле читать /var/log/messages
)
Все, что sed
сделал был поиск для слово «Feb» и окружить его той же escape-последовательности, как мы использовали выше.
Вы могли бы расширить его цвет несколько слов:
tail /var/log/messages | sed -e "s/\(Feb\|Mar\|Apr\)/\\o033[31m&\\o033[0m/g"
Какой бы цвет «Фев», «Мар», «Апрель» - каждый в темно-красный цвет.
Надеюсь, это даст вам некоторое представление о том, как сделать то, что вам нужно!
Одна проблема: параметр -E вызывает ошибку? – nickf
Вам нужно заменить -E на -e и выйти из всех круглых скобок. tail -f file | sed -e "s/\ ([0-9] + \)/$ RED \ 1 $ RESET/g; s/\ (\" [^ \ "] * \" \)/$ ЖЕЛТЫЙ \ 1 $ СБРОС/g " – itsadok
-e не является строго необходимым. -E - это опция для использования расширенных регулярных выражений, так что вам не нужно выходить из круглых скобок, но, видимо, -E не доступен для всех версий sed. –