我正在使用基于此处使用的技术的bash脚本:Get color output in bash为我的构建和其他脚本的输出着色以使事情更容易阅读。我的构建中的一个步骤执行“git pull”,git服务器在一堆其他输出中吐出这样的“欢迎”字符串:
** WARNING: THIS IS A PRIVATE NETWORK. UNAUTHORIZED ACCESS IS PROHIBITED. **
Use of this system constitutes your consent to interception, monitoring,
and recording for official purposes of information related to such use,
including criminal investigations.
我想将此特定消息的颜色设置为黄色,或者可能将其从输出中删除,同时单独留下其余输出。我试图替换这样一个简单的字符串:
WelcomeMessage="WARNING"
pathpat=".*"
ccred=$(echo -e "\033[0;31m")
ccyellow=$(echo -e "\033[0;33m")
ccend=$(echo -e "\033[0m")
git pull 2>&1 | sed -r -e "/$WelcomeMessage/ s%$pathpat%$ccyellow&$ccend%g"
欢迎字符串的第一行按预期显示为黄色,但其余行不显示。我真的很喜欢为确切的欢迎字符串着色,只有那个字符串,但由于很多原因,这不起作用:
WelcomeMessage="** WARNING: THIS IS A PRIVATE NETWORK. UNAUTHORIZED ACCESS IS PROHIBITED. **
Use of this system constitutes your consent to interception, monitoring,
and recording for official purposes of information related to such use,
including criminal investigations."
pathpat=".*"
ccred=$(echo -e "\033[0;31m")
ccyellow=$(echo -e "\033[0;33m")
ccend=$(echo -e "\033[0m")
git pull 2>&1 | sed -r -e "/$WelcomeMessage/ s%$pathpat%$ccyellow&$ccend%g"
失败并出现错误:sed:-e expression#1,char 78:unterminated address regex
我已经看了几个其他的问题,我能够让星号转义(通过在它们前面加上反斜杠),但我对这些时期和多行感到困惑。我想继续使用sed来解决这个问题,因为它与着色解决方案很好地集成。
感谢任何帮助。谢谢!
答案 0 :(得分:2)
以下内容将从**
的第一个实例到不在同一行的句点.
的第一个实例的每一行中以黄色着色。这将匹配写入的整个警告消息。
NORMAL=$(tput sgr0)
YELLOW=$(tput setaf 3)
git pull 2>&1 | sed "/\*\*/,/\./s/.*/$YELLOW&$NORMAL/"
注意 :如果您要删除邮件,可以使用此邮件:
git pull 2>&1 | sed '/\*\*/,/\./d'