Grep显示匹配和不匹配的内容

3

我该如何使用grep命令来同时显示匹配和不匹配的内容?匹配的内容应该是红色的,其他内容应该是普通颜色。

有没有可用的grep选项可以实现这个功能?


你为什么要这样做? - Avinash Raj
日志是在程序运行时动态生成的。我需要使用grep命令来查找一些我预期会出现错误的行。如果我只使用grep命令,那么只有匹配的行会被打印出来。为了更好地理解,我需要同时打印出匹配和不匹配的行。 - Krishna M
2个回答

1
这里是一个 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

使用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的一个非常好的解决方案 :) 你能解释一下awk命令吗?awk '/two/ {$0="\033[1;31m"$0"\033[0m"}1' file - Krishna M
@KrishnaM \033[1;31m 是在 awk 中设置 ANSI 颜色的转义代码。您可以查看此表格,其中 1 表示粗体,31 表示红色前景等等: http://pueblo.sourceforge.net/doc/manual/ansi_color_codes.html - Jotne

1
你可以通过使用替换模式来实现这一点,其中第二个模式匹配每一行而不突出显示任何内容。
grep --color 'pattern\|^' file

如果你想将整行都着色,而不仅仅是匹配的表达式,请修改正则表达式以匹配整个行。

grep --color '.*pattern.*\|^' file

你可以使用grep -E,也称为egrep,来避免使用反斜杠。(我相信也可能存在史前的grep实现根本不支持选择,但是它们几乎没有颜色支持。)

在较新的 grep 版本中,您无需设置 --color 选项,它是默认的。 - Jotne
1
通常(令人烦恼地!)是这样设置的,但明确指定它不会有任何损害,并且允许命令在这不是默认设置的情况下工作。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接