String 需要帮助使用Bash和sed着色/替换任意字符串吗

String 需要帮助使用Bash和sed着色/替换任意字符串吗,string,bash,colors,sed,String,Bash,Colors,Sed,我使用的bash脚本基于这里使用的技术:为构建和其他脚本的输出着色,以使内容更易于阅读。我的构建中的一个步骤执行git pull,git服务器在一堆其他输出中抛出一个欢迎字符串,如下所示: ** WARNING: THIS IS A PRIVATE NETWORK. UNAUTHORIZED ACCESS IS PROHIBITED. ** Use of this system constitutes your consent to interception, monitoring,

我使用的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表达式1,char 78:unterminated address regex

我看了几个其他的问题,我能够通过在星号前面加上反斜杠来避开它们,但我对句点和多行感到困惑。我想继续使用sed来解决这个问题,因为它与着色解决方案很好地集成在一起


感谢您的帮助。谢谢

从**的第一个实例到句点的第一个实例,下面的每一行都将以黄色显示。这不在同一条线上。这将与写入的整个警告消息相匹配

NORMAL=$(tput sgr0)
YELLOW=$(tput setaf 3)

git pull 2>&1 | sed "/\*\*/,/\./s/.*/$YELLOW&$NORMAL/"
注意:如果要删除邮件,可以使用以下选项:

git pull 2>&1 | sed '/\*\*/,/\./d'

为什么要匹配所有东西?您想要的是替换结束和开始。不确定它是否有效,但你能试试s,^,$ccyellow,;s、 $,$ccend,?对于其中一个,我希望可以选择从输出中删除消息,并且只删除消息。我想如果我匹配结束和开始,它会把整个输出都涂成黄色,不是吗?我只想把这根线涂上颜色/去掉。好的,那么,你只想涂上欢迎色?你知道有些TTY不支持ANSI颜色吗?我只希望欢迎字符串是彩色的,对吗。此脚本将仅在bash中运行,因此支持颜色。我真正的问题是匹配字符串。这个脚本只能在bash中运行,非常感谢!快速提问:您的magic命令如何跳过单词NETWORK或单词bankind后的第一个句点?sed regex是贪婪的,所以范围从**到。将是一个期间的最后一个实例。我描述中的答案有一个拼写错误,我说的是“first”而不是“last”。修正如果您对我的答案感到满意,请单击投票计数器旁边的“复选标记”将其作为您选择的答案。这有助于你获得声誉,也有助于其他有类似问题的人。感谢并欢迎来到SOAh,感谢您的澄清。但是我还是很困惑。Git在消息之后吐出的下一个东西是假设我刚刚拉出来的,它已经是最新的了。。即使存在句点,该消息也不是黄色的。你的命令很有效,我只是不明白!再次感谢。@RotsiserHo这有点奇怪,你能粘贴你看到的实际输出吗,或者至少在警告消息之后粘贴一点文本,如果有任何内容,请粘贴在警告消息之前。