使用 grep 突出显示参数

使用 grep 突出显示参数

我需要一些关于使用 bash 中的突出显示功能的帮助。

我的目标是 grep 三个参数,然后用三种不同的颜色突出显示它们。我一直在搞这个,但无法集中精力思考如何做到这一点。

我试过了

输入:

user@syslog:~$ grep --color=always Dwhite VPNsyslog-2016 | grep --color date | grep --color time

输出:

结果仅突出显示Dwhite,而时间由于某种原因日期没有突出显示。所有这些都以红色突出显示。

我也尝试过

user@syslog:~$ GREP_COLORS='mt=01;32' grep Dwhite VPNsyslog-2016| GREP_COLORS='mt=01;31' grep date VPNsyslog-2016 | GREP_COLORS='mt=01;34' time VPNsyslog-2016 

输出:

没有什么。

如果语法都被夸大了,请原谅。我对此很陌生,而且我不是程序员。我只是一名网络管理员,试图让查看系统日志变得更容易。

答案1

grep -E --color=always 'Dwhite|date|time' VPNsyslog-2016

请注意,grep不支持同一命令中不同匹配的不同颜色 - 并且将它们在管道中链接在一起实际上是一个 AND 操作(因此只有匹配所有三个模式的行才会被输出 - 并且只有最终的模式才会突出显示) 。

如果您想要更多可配置的日志文件突出显示,您必须使用专门的工具,例如西泽,阻塞,彩尾,皮格门特化或者强调(在其他人中)。所有这些可能都已经为您的 Linux 发行版打包了(它们当然在 Debian 和 Debian 衍生版本中,例如 Ubuntu)。

答案2

你可以试试这个:

user@syslog:~$ cat VPNsyslog-2016 | GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

或者不执行cat命令

user@syslog:~$ GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' VPNsyslog-2016 | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

在最后一个中,STDIN 将具有第一个文件内容grep,因此您无需在每次grep执行中指定文件

你错过了--color=always旗帜。

答案3

y 默认值--color仅在输出到终端时才对输出进行着色。如果输出进入管道,则 grep 假定它将由一个程序进行解析,该程序将被 grep 插入的额外转义序列所迷惑以使输出着色。要对输出进行着色,即使它进入管道,也可以传递--color=always全部grep 调用。

GREP_COLORS='mt=01;32' grep --color=always Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always date |
GREP_COLORS='mt=01;34' grep --color=always time

请注意,grep 只会打印匹配的行。在您的示例中,管道将仅打印包含Dwhiteanddate和 的行time。如果您想打印所有行,您可以告诉每个 grep 调用搜索您要查找的内容或空字符串;每行都包含空字符串,因此每行都会在输出中结束。

GREP_COLORS='mt=01;32' grep --color=always -e '' -e Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -e '' -e date |
GREP_COLORS='mt=01;34' grep --color=always -e '' -e time

或使用正则表达式:

GREP_COLORS='mt=01;32' grep --color=always -E '|Dwhite' VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -E '|date' |
GREP_COLORS='mt=01;34' grep --color=always -E '|time'

但是,除非你被困在一台你真的不想安装任何其他东西的机器上,否则你最好使用一个旨在对输出进行着色的工具,例如中列出的工具卡斯的回答或在这个线程

相关内容