Bash 根据输出,高亮显示grep结果的颜色不同
如何根据匹配的内容以不同的颜色(例如,绿色或红色)突出显示Bash 根据输出,高亮显示grep结果的颜色不同,bash,shell,colors,grep,match,Bash,Shell,Colors,Grep,Match,如何根据匹配的内容以不同的颜色(例如,绿色或红色)突出显示grep结果 目前,我已经做到了: grep -H -i "^mail.hostname" WEB-INF/config/mail.props | grep --color=auto -P "\=.*" 哪些输出(例如): 其中,=localhost突出显示。(注意——我不希望突出显示=符号,但这是另一回事。) 当突出显示为localhost时,如何使其显示为绿色,对于任何其他值(例如,smtpserver)显示为红色 更新--回答前两
grep
结果
目前,我已经做到了:
grep -H -i "^mail.hostname" WEB-INF/config/mail.props | grep --color=auto -P "\=.*"
哪些输出(例如):
其中,=localhost
突出显示。(注意——我不希望突出显示=
符号,但这是另一回事。)
当突出显示为localhost
时,如何使其显示为绿色,对于任何其他值(例如,smtpserver
)显示为红色
更新--回答前两条评论:
如果我这样做:
grep -H -i "^mail.hostname" WEB-INF/config/mail.props \
| GREP_COLOR='01;31' grep --color=auto -P '=\K.*' \
| GREP_COLOR='01;32' grep --color=auto -P '=\Klocalhost'
只有当该行与
localhost
匹配时,才会打印该行(高亮显示为绿色)。。。不是预期的结果…中间grep在这里会找到所有“=xxxx”,并将xxxx部分涂成红色
最后一个grep查找“localhost”或行的开头,并将它们标记为绿色。因为“行的开始”不是一个可显示的字符,所以它不是彩色的,但是因为所有行都有一个“行的开始”,所以中间grep的所有行都被传递到输出
grep-H-i“^mail.hostname”WEB-INF/config/mail.props | grep\u COLOR='01;31'grep--color=always-P'=\K.'| grep_color='01;32'grep-E--color=始终为'localhost | ^'
感谢Sundeep的“grep-p”提示
我喜欢OP的
[^=]*$
匹配“=”符号后的所有内容 并且可能有助于避免突出显示=
,您可以使用grep--color=auto-p'=\K.*
(注意:=
不需要转义)感谢您的评论…我正在接近,但还没有到那里…尝试使用grep--color=always
作为中间grepNo输出,再使用grep-H-I“^mail.hostname”WEB-INF/config/mail.props | GREP_COLOR='01;31'grep--color=always-P'=\K.'| grep_color='01;32'grep--color=auto-P'=\Klocalhost'
在“=”符号后匹配所有内容更好的方法是什么?你的regexp和\K
或者我的regexp和[^=]
?有点像判断调用,-P
一个使用Perl正则表达式,我们中的一些人不习惯,而你的则不太明显(我会在shell脚本中添加注释)。两者都可以!对我来说,Perl正则表达式真的是一个谜…所以,我更喜欢另一个…习惯问题…谢谢你的解释。另外,[^=]*$在两个“=”同时使用时会有不同的效果!更简单(更常见)的示例。。。df | grep--color=always-P''%K!'
grep -H -i "^mail.hostname" WEB-INF/config/mail.props \
| GREP_COLOR='01;31' grep --color=auto -P '=\K.*' \
| GREP_COLOR='01;32' grep --color=auto -P '=\Klocalhost'