Лучший способ удалить цветовые экраны ANSI в Unix - PullRequest
4 голосов
/ 13 сентября 2011

У меня есть Perl Progaram его отпечатки выводятся с цветом. если я переопределяю вывод в файле и открываю его в vi, я вижу специальный символ цвета. как то так.

^[[31;43mAnd this is red on_yellow too^[[0m

Каков наилучший способ удалить этот цветной символ из выходного файла?

Спасибо

Обновление:

Я попробовал thid regex. у меня это работает:

 cat -v a|head
^[[30;41mThis is black on_red^[[0m
^[[30;41mAnd this is black on_red too^[[0m
^[[30;42mThis is black on_green^[[0m
^[[30;42mAnd this is black on_green too^[[0m
^[[30;43mThis is black on_yellow^[[0m
^[[30;43mAnd this is black on_yellow too^[[0m
^[[30;44mThis is black on_blue^[[0m
^[[30;44mAnd this is black on_blue too^[[0m
^[[30;45mThis is black on_magenta^[[0m
^[[30;45mAnd this is black on_magenta too^[[0m


$ cat -v a|head|perl -lane 's/\^\[\[\d+(;\d+)*m//g; print'
This is black on_red
And this is black on_red too
This is black on_green
And this is black on_green too
This is black on_yellow
And this is black on_yellow too
This is black on_blue
And this is black on_blue too
This is black on_magenta
And this is black on_magenta too

Ответы [ 2 ]

11 голосов
/ 04 октября 2015

Модуль Perl Term::ANSIColor предоставляет функцию colorstrip(), чтобы сделать это. Например,

ls --color | perl -MTerm::ANSIColor=colorstrip -ne 'print colorstrip($_)'

Модуль Term::ANSIColor является частью ядра Perl.

9 голосов
/ 13 сентября 2011

По совпадению мне просто нужно было решить эту проблему, и это регулярное выражение, которое я придумал:

while (<>) {
    s/\e\[[\d;]*[a-zA-Z]//g;
    print;
}

Я только что получил это, изучив некоторые примеры выходных данных (в частности, вывод grep --color=always ...), поэтому он может не охватывать все ожидаемые побеги.

Согласно информации на этом сайте , последний класс символов может быть сокращен с [a-zA-Z] до просто [mK].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...