【问题标题】:Expect: Remove color codes from output and log file期望:从输出和日志文件中删除颜色代码
【发布时间】:2018-01-07 20:48:21
【问题描述】:
我正在运行一个调用远程计算机上的多个脚本的期望脚本。这些 shell 脚本返回颜色输出(主要是红色和绿色)。
问题是,这些颜色代码进入了我不想要的 log_file 和 STDOUT。我无法修改远程脚本。
我尝试了sed,在那里我通过 sed 将来自 expect 的输出通过管道删除了颜色代码。问题是,expect 脚本由 Webmin“自定义命令”模块运行,该模块在管道输出方面存在问题。
我还尝试使用期望脚本中的 sed 管道调用远程脚本,但这会产生其他问题。
有没有办法通过内置的东西直接从 STDOUT 和 log_file 中删除颜色代码?
【问题讨论】:
标签:
linux
bash
shell
expect
【解决方案1】:
颜色代码以 CSI 代码 (ESC+[) 开头,后面是可以用 ; 分隔的数字。以下 perl 命令可用于删除这些序列:
perl -pe 's/\033\[[\d;]*m//g'
# examples
echo $'\033''[3;31mhi'$'\033''[0m'
echo $'\033''[3;31mhi'$'\033''[0m' | perl -pe 's/\033\[[\d;]*m//g'
编辑:\033 或 \e 或 \x1b
其他选项可能是导出 TERM 变量,例如:
export TERM=xterm-old