Удалите цветовые коды ANSI из текстового файла, используя bash

У меня есть bash script, который запускается и выводится в текстовый файл, однако используемые цветовые коды также включают то, что я хотел бы знать, - как удалить их из файла, т.е.

^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m

поэтому я просто хочу, чтобы меня оставили с Hello и User

Ответ 1

sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name

эта команда удаляет специальные символы и цветовые коды из файла

это некоторые из ANSI-кодов:    ESC[#;#H or ESC[#;#f перемещает курсор в строку #, столбец #   ESC[2J очистить экран и домашний курсор   ESC[K очистить до конца строки,

обратите внимание, что в случае четкого кода нет ни числа, ни точки с запятой ;

согласен с нижеследующим комментарием: если цифры более двух цифр, используйте это:

sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename

Ответ 2

Помогает ли это решить проблему?

$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g'
Hello

ура!!

Ответ 3

Мое решение:

... | sed $'s/\e\\[[0-9;:]*[a-zA-Z]//g'

Двоеточие поддерживает побеги для некоторых старых типов терминалов.