1

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

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

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

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

cat log | grep 'status":1'

这完美地工作,并输出如下内容:

[2013-10-16 14:39:17] {“电子邮件”:“email@host.com”,“电话”:“123456789”,“地址”:“某个地址”,“状态”:“1 ”}

我想要做的是在输出中突出显示电子邮件,使其具有以下内容:

[2013-10-16 14:39:17] { “电子邮件”:“email@host.com”,“电话”:“123456789”,“地址”:“某个地址”,“状态”:“1 ”}

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

那可能吗?

谢谢

4

4 回答 4

2

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

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

于 2013-10-16T12:58:46.493 回答
2

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

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

于 2013-10-16T12:58:56.953 回答
1

假设您已经突出显示了您将执行的操作:

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

如果您尚未设置突出显示,请使用以下--color选项:

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

这将按状态过滤1并突出显示所有电子邮件和状态。如果您只想突出显示电子邮件,那么:

$ grep '"status":"0"' file | grep '"email":"[^"]*"'
于 2013-10-16T13:03:04.680 回答
0

此外,尝试操作使用 using 过滤的文本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}'
于 2013-10-16T13:09:00.687 回答