我需要一些关于使用 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
答案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 只会打印匹配的行。在您的示例中,管道将仅打印包含Dwhite
anddate
和 的行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'
但是,除非你被困在一台你真的不想安装任何其他东西的机器上,否则你最好使用一个旨在对输出进行着色的工具,例如中列出的工具卡斯的回答或在这个线程。