Символы ^[[37m
и ^[[0m
являются частью последовательности перехода ANSI (коды CSI).
Смотрите также полные спецификации.
Используя sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
является побег специальный символ ( такой же , как \x1B
или \033
\[
является вторым символом escape-последовательности
[0-9;]*
- это значение цвета
m
- последний символ escape-последовательности
Пример с командной строкой параметров порядка:(ОП = О Р первоначально оплащенная Oster)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Том Хейл предлагает удалить все другие escape-последовательности, используя [a-zA-Z]
вместо буквы m
специфичной для цветовой escape-последовательности. Но [a-zA-Z]
может быть слишком широким и может удалить слишком много. Михал Фаленски и Мигель Мота предлагают удалить только некоторые escape-последовательности, используя [mGKH]
и [mGKF]
соответственно.
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Color
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
Использование perl
Версия sed
установленная в некоторых операционных системах, может быть ограничена (например, MacOS X). Преимущество команды perl
состоит в том, что ее часто проще устанавливать / обновлять в более операционных системах.
Выберите свое регулярное выражение в зависимости от того, сколько команд вы хотите отфильтровать:
perl -pe 's/\x1b\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\x1b\[[0-9;]*[mG]//g'
perl -pe 's/\x1b\[[0-9;]*[mGKH]//g'
perl -pe 's/\x1b\[[0-9;]*[a-zA-Z]//g'
Пример с командной строкой OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset"' \
| perl -pe 's/\x1b\[[0-9;]*m//g'
использование
Как отмечается в комментарии Стюарта Кардалла , этот трюк используется проектом Ultimate Nginx Bad Bot (почти 1000 звезд) для очистки отчета по электронной почте ;-)