Grep突出显示搜索到的图案以外的图案

时间:2013-10-16 12:46:49

标签: bash grep

我使用grep搜索一些日志文件,我的日志条目如下:

[2013-10-16 14:39:17] {"email":"email@host.com", "tel":"123456789", "address":"some address", "status":"0"}

(这是一个示例,每个条目都有大量数据)

我想要做的是:使用模式过滤并突出显示另一个模式,例如我过滤状态= 1

cat log | grep 'status":1'

这非常有效,并输出如下内容:

[2013-10-16 14:39:17] {“email”:“email@host.com”,“tel”:“123456789”,“地址”:“某地址”,“状态“:” 1 “}

我想要做的是突出显示输出中的电子邮件,例如:

[2013-10-16 14:39:17] {“email”:“email@host.com”,“tel”:“123456789”,“地址”:“某地址“,”状态“:”1 “}

注意,我只是想突出显示电子邮件,而不是过滤!

可能吗?

由于

4 个答案:

答案 0 :(得分:2)

再次针对您要突出显示的模式grep

cat log | grep 'status":"1' | grep '"email":"[^"]*"'

答案 1 :(得分:1)

出于突出显示的唯一目的,您可以查看https://github.com/nicoulaj/rainbow

以下列出了其他一些荧光笔:https://stackoverflow.com/a/4269167/363281

答案 2 :(得分:0)

假设你已经突出显示已经工作,你会这样做:

$ grep -e '"email":"[^"]*"' -e '"status":"1"'  file

如果您没有设置突出显示,请使用--color选项:

$ grep --color=auto -e '"email":"[^"]*"' -e '"status":"1"'  file

这会根据1的状态进行过滤,并突出显示所有电子邮件和状态。如果您只想要突出显示电子邮件:

$ grep '"status":"0"' file | grep '"email":"[^"]*"'

答案 3 :(得分:0)

此外,尝试使用awk操纵过滤的文本。使用这样的文件

$ cat test.txt
[2013-10-16 14:39:17] {"email":"email1@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email2@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email3@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email4@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email5@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email6@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email7@host.com", "status":"1"}

尝试此命令

cat test.txt | grep \"status\":\"1\" | awk '{print "\033[32m",$3,"\033[0m",$4}'