奇怪的问题。当我在 Bash 中设置变量以显示为某种颜色时,我不知道如何重置它。这是一个例子:
首先定义颜色代码:
YELLOW=$(tput setaf 3)
RESET=$(tput sgr0)
现在设置错误消息变量及其颜色部分。
ERROR="File not found: "$YELLOW"Length.db$RESET"
这将变量 ERROR 设置为从最终将显示在终端上的函数返回的错误消息。除文件名外,错误将全部显示为白色。文件名以黄色突出显示给用户。
除非使用 rsyslog 进行记录,否则这非常有效。当错误消息被记录时,它会显示如下:
找不到文件:#033[33mLength.db#033(B#033[m
这显然使得日志文件非常难以阅读。起初我想我可以在输出到终端后但在记录之前立即使用 sed 处理错误消息,但没有任何内容可以搜索和替换。即,我想我可以使用 sed 来做类似的事情:
ERROR=$(echo "$ERROR" | sed -r 's%\#033\[33m%%')
但是当您回显变量时,这些字符不存在(这是有道理的,因为您在终端上看不到它)。所以我被困住了。我不知道如何在设置变量后重置它的颜色。我还尝试使用 $RESET 以某种方式逆转该过程,但也许我的语法错误或其他原因。
你几乎已经拥有了。试试这个:
ERROR=$(echo "$ERROR" | sed 's%\o033\[33m%%g')
但请注意,使用\oNNN
中的转义序列sed
是 GNU 扩展,因此不符合 POSIX 标准。如果这是一个问题,您应该能够做更多类似的事情:
ERROR=$(echo "$ERROR" | sed 's%'$(echo -en "\033")'\[33m%%g')
显然,这仅适用于该一种特定颜色(黄色),以及要删除的正则表达式any转义序列(例如其他颜色、背景颜色、光标定位等)将是稍微复杂一些.
另请注意,-r
不是必需的,因为这里没有使用扩展正则表达式语法。我猜你已经知道了,并且你刚刚包括了-r
出于习惯,但为了清楚起见,我还是提到了它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)