Удалите цветовые коды 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'
Двоеточие поддерживает побеги для некоторых старых типов терминалов.