高亮显示grep结果的颜色不同,具体取决于输出

时间:2018-07-18 09:18:30

标签: bash shell colors grep match

如何根据匹配的内容用不同的颜色(例如绿色或红色)突出显示grep结果?

目前,我已完成此操作:

grep -H -i "^mail.hostname" WEB-INF/config/mail.props | grep --color=auto -P "\=.*"

输出(例如):

WEB-INF/config/mail.props:mail.hostname=localhost

突出显示=localhost。 (注意-我不希望突出显示=标志,但这是另一个故事。)

如何使高亮显示为localhost时为绿色,而对于任何其他值(例如smtpserver)为红色?

更新-回答前2条评论:

如果我这样做:

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相匹配的行才会被打印(绿色突出显示)...不是预期的结果...

1 个答案:

答案 0 :(得分:0)

此处的中间grep会找到所有“ = xxxx”,并将xxxx部分涂成红色。

最后一个grep查找“ localhost”或行首,并将其标记为绿色。由于“行首”不是可显示的字符,因此不会上色,但是由于所有行都有“行首”,因此来自中间grep的所有行都将传递到输出。

grep -H -i "^mail.hostname" WEB-INF/config/mail.props | GREP_COLOR='01;31' grep --color=always -P '=\K.*' | GREP_COLOR='01;32' grep -E --color=always 'localhost|^'

感谢Sundeep的“ grep -P”提示。

我喜欢OP的[^=]*$匹配“ =”符号后的所有内容!