Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 根据输出,高亮显示grep结果的颜色不同_Bash_Shell_Colors_Grep_Match - Fatal编程技术网

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'