Разделите последовательности ANSI из строки с помощью кода bash-python

Я пытаюсь использовать bash для удаления escape-последовательностей цвета ANSI из строки без успеха. Я уже пробовал код на основе регулярных выражений.

      #!/bin/bash

Blue='\033[0;34m'         # Blue
Clear='\033[0m'           # Text Reset

removeColors (){
    local uncolored_string=''
    
    local import_row='import re; \n'
    local regex_='(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]'
    local func_def_row='def escape_ansi(line): \n'
    local ansi_escape_row="ansi_escape=re.compile(r\'$regex_\') \n" 
    local return_row="return ansi_escape.sub('', line) \n"
    local print_row="print escape_ansi(line = '$1')"

    local code="$import_row$func_def_row$ansi_escape_row$return_row$print_row"
    
    echo $(python -c $code)
}

str="Press ${Blue}any key${Clear} to continue..."
echo -e "$str"

removeColors "$str"

Я все еще получаю код ниже.

        File "<string>", line 1
    import
         ^
SyntaxError: invalid syntax

Вы можете помочь мне?

Обновлять:

Я нашел библиотеку python strip-ansi .

      removeColors (){
    local uncolored_string=''
    local ansi_snippet="$1"
    
    echo "$(python3 -c "from strip_ansi import strip_ansi; print(strip_ansi(\"$ansi_snippet\"))")"
}

Однако даже после его установки я получаю следующую ошибку:

      Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'strip_ansi'

1 ответ

Решение: echo -e "$1" | ansi2txt | col -b

Другие вопросы по тегам