Как «un-ANSI-фы» журналы?

10

В последнее время у инструментов командной строки была тенденция использовать причудливые цвета ANSI в своих выходных данных журнала (например, NPM и множество инструментов на основе nodejs, rvm, docker и несколько других «современных» инструментов).

Это делает его удобным для чтения на экране (*), но не таким приятным, когда вы хотите направить вывод в файл журнала или через транспорт, который плохо обрабатывает ANSI, например, различные инструменты удаленного выполнения и веб-решения для мониторинга. Многие более зрелые инструменты, по крайней мере, были приличны, чтобы обнаруживать, когда вывод не TTY, и отключать цвет, но не с этими новыми растрепанными «дружественными» CLI - что оставляет мне попытку избавиться от цветов ANSI с помощью конвейера. вывод через еще один процесс.

Обработка вывода, s/\x1B\[[0-9]*\w//gпохоже, делает свою работу, но есть ли более чистый подход, чем просто копирование вставки регулярных выражений во все мои сценарии?

(*) по крайней мере, пока инструмент не попытается отобразить ошибки темно-красным на вашем темном фоне терминала.

Guss
источник
2
См .: unix.stackexchange.com/questions/14684/… - unix.stackexchange.com/questions/111899/… stackoverflow.com/questions/17998978/… superuser.com/questions/380772/… - от 4+ вопросов за за 3 года на 3 сайтах мы получили ответы только на использование инструмента, который выполняет замену / удаление регулярных выражений. Я думаю, что нет ничего лучше.
Зоредаче
Единственное, что кажется предметом дискуссии, это то, какое регулярное выражение является лучшим для какой ситуации.
Зоредаче
1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?Сохранить свой фильтр очистки в файл с именем '/ usr / local / bin / stripttycolor.sh` или что-то? Таким образом, вы ограничиваете регулярное выражение одним местоположением?
Зоредаче
3
Если вы знаете, что будете записывать вывод в файл, проще всего сделать (по крайней мере, для NPM) запуск с --no-colorфлагом. Многие другие команды также имеют похожие флаги.
Моше Кац
@MosheKatz: к сожалению, не все команды делают, например bower.
Guss

Ответы:

1

"ansifilter -p" может быть полезен для вас ...

Это в репозиториях Fedora; -p указывает простой вывод:

Name        : ansifilter
From repo   : updates
Summary     : ANSI terminal escape code converter
URL         : http://www.andre-simon.de/doku/ansifilter/ansifilter.php
License     : GPLv3+
Description : Ansifilter handles text files containing ANSI terminal escape codes.
            : The command sequences may be stripped or be interpreted to generate formatted
            : output (HTML, RTF, TeX, LaTeX, BBCode).
Liczyrzepa
источник
Работает хорошо, теперь мне просто нужно собрать его для Ubuntu :-)
Guss