我使用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 “}
注意,我只是想突出显示电子邮件,而不是过滤!
可能吗?
由于
答案 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}'