【发布时间】:2014-07-23 10:13:24
【问题描述】:
如何使用 grep 命令同时显示匹配和不匹配的?匹配的应该是红色的,其他的应该是正常的颜色。
是否有可用的 grep 选项来执行此操作?
【问题讨论】:
-
你为什么要这样?
-
日志在程序运行时动态生成。我需要 grep 一些我希望有错误的行。如果我做 grep 只打印匹配的行。我需要匹配和不匹配的行来更好地理解
如何使用 grep 命令同时显示匹配和不匹配的?匹配的应该是红色的,其他的应该是正常的颜色。
是否有可用的 grep 选项来执行此操作?
【问题讨论】:
您可以通过使用交替模式来完成此操作,其中第二个模式匹配每一行而不突出显示任何内容。
grep --color 'pattern\|^' file
如果您想要整行着色,而不仅仅是匹配的表达式,只需修改正则表达式以匹配整行。
grep --color '.*pattern.*\|^' file
您可以使用grep -E aka egrep 来避免反斜杠。 (我相信也可能有史前的grep 实现根本不支持交替,但它们也几乎没有着色支持。)
【讨论】:
grep版本不需要设置--color选项,默认即可。
这是awk
cat file
one song
two cars
three houses
awk '/two/ {$0="\033[1;31m"$0"\033[0m"}1' file
one song
two cars
three houses
Whit awk 您可以为不同的发现设置多种颜色。
awk '/two/ {$0="\033[1;31m"$0"\033[0m"} /hous/ {$0="\033[1;36m"$0"\033[0m"}1' file
one song
two cars
three houses
我确实在日志上将它与 tail 一起使用,以查看不同颜色的情况。
要仅找到颜色代码的单词,请执行以下操作:
awk '{gsub(/two/,"\033[1;31m&\033[0m")}1' file
看看你可以使用什么:
awk 'BEGIN {for (a=0;a<=1;a++) for (f=30;f<=37;f++) for (b=40;b<=47;b++) print "\033["a";"f";"b"m"a,f,b"\033[m"}'
甚至还有 256 色版本。
【讨论】:
awk '/two/ {$0="\033[1;31m"$0"\033[0m"}1' file
\033[1;31m 是用于在awk 中设置 ansi 颜色的转义码查看此表,您会看到 1 是粗体,31 是红色前景等:pueblo.sourceforge.net/doc/manual/ansi_color_codes.html