我有一个bash脚本,我用颜色和东西做了很好的输出,但是我的日志文件看起来很糟糕。
如果它可以在管道传输到日志文件之前进行修改,那将是更可取的但是如果这是不可能的,我想至少运行一个清理功能,可以在我的脚本结束时运行清理丑陋的日志文件。
我尝试过像sed -r -i "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" install.log
这样的东西,但似乎没有清理
以下是使用的颜色变量
BOLD=$(tput bold); RED=$(tput setaf 1); WHITE=$(tput setaf 7); BGBLUE=$(tput setab 4); BGRED=$(tput setab 1); RCol=$(tput sgr0); InCol=$(tput rev); UndLn=$(tput smul)
BWhiOn_Red=$BOLD$WHITE$BGRED; BWhiOn_Blu=$BOLD$WHITE$BGBLUE; BRed=$BOLD$RED;
这是一个代码段
printf "%s\n" "${BRed}MISSION ABORTED! Abandon Ship!!${RCol}" | tee -a install.log
这就是我查看日志文件时的样子
^[[1m^[[31mMISSION ABORTED! Abandon Ship!!^[(B^[[m
使用sed -r -i "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" install.log
时,日志文件会显示此MISSION ABORTED! Abandon Ship!!^[(B
似乎正则表达式并不涵盖tput sgr0
,但我不确定如何解决它
答案 0 :(得分:1)
这对我有用:
sed -i -e 's/\x1B[^m]*m//g' install.log
要分解sed命令,\x1B
是启动控制序列的转义字符:Ctrl-[
。控制序列以m
结尾,因此我们发现每个字符都不是m,后面是m:[^m]*m
。
答案 1 :(得分:0)
避免问题
if [ -t 1 ]
then
BOLD=$(tput bold);
RED=$(tput setaf 1)
...
fi
如果重定向到文件
,则不会设置值