【问题标题】:Grep display both matched and unmatchedgrep 显示匹配和不匹配
【发布时间】:2014-07-23 10:13:24
【问题描述】:

如何使用 grep 命令同时显示匹配和不匹配的?匹配的应该是红色的,其他的应该是正常的颜色。

是否有可用的 grep 选项来执行此操作?

【问题讨论】:

  • 你为什么要这样?
  • 日志在程序运行时动态生成。我需要 grep 一些我希望有错误的行。如果我做 grep 只打印匹配的行。我需要匹配和不匹配的行来更好地理解

标签: linux unix ubuntu grep


【解决方案1】:

您可以通过使用交替模式来完成此操作,其中第二个模式匹配每一行而不突出显示任何内容。

grep --color 'pattern\|^' file

如果您想要整行着色,而不仅仅是匹配的表达式,只需修改正则表达式以匹配整行。

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

您可以使用grep -E aka egrep 来避免反斜杠。 (我相信也可能有史前的grep 实现根本不支持交替,但它们也几乎没有着色支持。)

【讨论】:

  • 5月grep版本不需要设置--color选项,默认即可。
  • 通常(很烦人!)以这种方式设置,但明确指定它并没有害处,并且即使这不是默认设置也允许命令工作。
【解决方案2】:

这是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 的一个非常好的解决方案 :) 你能解释一下 awk 命令吗? awk '/two/ {$0="\033[1;31m"$0"\033[0m"}1' file
  • @KrishnaM \033[1;31m 是用于在awk 中设置 ansi 颜色的转义码查看此表,您会看到 1 是粗体,31 是红色前景等:pueblo.sourceforge.net/doc/manual/ansi_color_codes.html
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 2012-11-23
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多