我如何使grep结果有颜色?

我有我的程序的一些输出: # php check.php | grep -E "rule_1|rule_4" # php check.php | grep -E "rule_1|rule_4"

我希望等于rule_1的结果为红色,结果等同于rule_4为蓝色。

这是可能的,因为在这一刻,一切都是红色的。

尝试这个:

 alias egrep="grep -E --color=never" alias egrep-grey=" GREP_COLOR='1;30' grep -E --color=always" alias egrep-red=" GREP_COLOR='1;31' grep -E --color=always" alias egrep-green=" GREP_COLOR='1;32' grep -E --color=always" alias egrep-yellow=" GREP_COLOR='1;33' grep -E --color=always" alias egrep-blue=" GREP_COLOR='1;34' grep -E --color=always" alias egrep-magenta="GREP_COLOR='1;35' grep -E --color=always" alias egrep-cyan=" GREP_COLOR='1;36' grep -E --color=always" alias egrep-white=" GREP_COLOR='1;37' grep -E --color=always" php check.php | egrep "rule_1|rule_4" | egrep-red "rule_1|$" | egrep-blue "rule_4|$" 

您不能使用grep本身作为通用的着色工具。 像colortail可以做你想做的事情。

你可以用像flex这样的正则expression式parsing器来做到这一点。 但请记住,某些模式可以以不直观的方式进行解释(例如,如果您的parsing器匹配最长模式与最短模式)。 例如,模式aaaa1 ..1|aaa1 aaaa1和inputaaaa1通常会匹配。

查看colorize.pl ,它将为用户定义的string打印不同的颜色。

这里是colorize.pl项目的描述:

Colorize.pl是一个简短的脚本,从标准input读取并写入标准输出。 匹配用户searchstring的行将使用用户定义的颜色进行着色。 命令行选项可用。 着色通过ANSI转义码完成。

在我的苹果MacBook Pro上,以下内容将在打印中显示“login”,而“苹果”显示为绿色:

 tail /var/log/system.log | colorize.pl +:login +:apple