Linux 删除 颜色转义字符 乱码 \x1b

目录

Linux颜色控制

方式一:添加sed正则命令

方式二:将输出写入文件再读取

Git颜色控制


使用Python paramiko ssh 获取 git 输出时,出现乱码,实际上是终端输出的ANSI颜色转义字符,用于控制终端颜色展示:

\x1b[?1h\x1b=\r  master\x1b[m\r\n

Linux颜色控制

可以通过以下方式删除ANSI颜色转义字符:

方式一:添加sed正则命令

source /etc/profile; git branch | sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g"

注:以上正则命令 \x1B\[[0-9;]*[a-zA-Z] 通过python正则只能清除部分颜色转移字符,原因不明:

import re

def remove_color_escape_sequences(log_string):
    pattern = r'\x1B\[[0-9;]*[a-zA-Z]'
    cleaned_string = re.sub(pattern, '', log_string)
    return cleaned_string

# 示例用法
log_string = '\x1b[?1h\x1b=\r  master\x1b[m\r\n'
cleaned_log_string = remove_color_escape_sequences(log_string)
print([cleaned_log_string])
# 输入:'\x1b[?1h\x1b=\r  master\x1b[m\r\n'
# 输出:'\x1b[?1h\x1b=\r  master\r\n'

注:因控制台支持ANSI颜色转移字符解析,因此直接打印字符串无法看出其中的ANSI颜色转移字符,可将字符串写入列表查看

方式二:将输出写入文件再读取

source /etc/profile; git branch > log.txt; cat log.txt; rm -rf log.txt

Git颜色控制

git本身也有控制颜色展示的配置,但只能控制颜色部分,头尾的ANSI颜色转义字符并不能去除:

source /etc/profile

# 开启颜色显示
git config --global color.branch auto
git config color.branch auto

# 关闭颜色显示
git config --global color.branch never
git config color.branch never

注:

  • 加载source /etc/profile才能生效
  • 关闭和开启需要对应,如果使用git config color.branch never命令关闭,则必须使用git config color.branch auto命令开启

对应的输出有2行:

# auto
['\x1b[?1h\x1b=\r* \x1b[32m(HEAD detached at 6e7e42203a)\x1b[m\x1b[m\r\n', '\r\x1b[K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b[?1l\x1b>']
# never
['\x1b[?1h\x1b=\r* (HEAD detached at 6e7e42203a)\x1b[m\r\n', '\r\x1b[K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b[?1l\x1b>']

 

 ChatGPT真是个好东西!

你可能感兴趣的:(Linux,Git,Python,ANSI)