Получить выборочный вывод цвета в команде cosole сложно. Во времена DOS вы могли использовать escape-коды ANSI через ANSI.SYS. Но это не работает на современных машинах Windows (определенно не на 64-битных машинах и, возможно, даже на 32-битных машинах)
Вы можете использовать PowerShell для вывода одной строки в цвете. Например:
powershell write-host -foregroundcolor Red "Hello world"
Но переключение контекста происходит очень медленно.
Есть также хаки пакетных файлов, которые используют FINDSTR для выборочного вывода строк в цвете. См. Как отображать разные цвета в командной строке Windows.
Но оба вышеупомянутых метода требуют, чтобы вы предоставили цвет при создании контента. Но вы хотите выборочно раскрасить текст после того, как он уже был сгенерирован.
Конечно, нет никакой нативной утилиты, которая может делать то, что вы хотите. Возможно, есть сторонний инструмент, который может искать stdin и выделять совпадения красным, но я не знаком ни с одним из них.
Вместо использования цвета вы можете переформатировать каждую строку, содержащую интересующую строку. Например, совпадающим строкам может предшествовать строка типа >>>>>>>>>>
. Для этого вам понадобятся две вещи: 1) утилита поиска и замены на основе регулярных выражений, 2) возможность передачи результатов теста в утилиту.
Я написал гибридную утилиту JScript/batch под названием REPL.BAT. Он выполняет поиск и замену регулярных выражений в stdin и записывает результат в stdout. Утилита представляет собой чистый скрипт, поэтому сторонние исполняемые файлы не требуются. Он работает на любом компьютере с Windows начиная с XP. Полная документация встроена в скрипт.
Предполагая, что REPL.BAT находится в вашем текущем каталоге или, что еще лучше, где-то в вашем PATH:
yourAutomatedTestCommand | repl ".*\bnot ok\b.*" ">>>>>>>>>> $&" i
Приведенная выше команда будет изменять только те строки, которые содержат not ok
(без учета регистра) на границах слов. Есть много вариантов того, как вы переформатируете интересующую линию. Например, целые строки можно добавлять как до, так и после строки, используя опцию X
сочетании с escape-последовательностью \n
newline.