如何在“cat”的输出中突出显示一个单词?

B F*_*ley 13 highlighting cat

我可以执行以下操作以查看“cat”的输出中是否有可用的单词:

cat filename | grep word
Run Code Online (Sandbox Code Playgroud)

这将过滤输出并仅显示那些包含“word”的行。现在,是否可以只突出显示输出中的“单词”而不删除其他行?

Chr*_*own 19

您可以使用 grep 获取 EOL 以及您的实际查询(如果您已经有一个别名grepto use --color,这是许多发行版中的默认值,您可以在以下示例中省略它):

grep --color=auto 'word\|$' file
Run Code Online (Sandbox Code Playgroud)

由于 EOL 不是真正的字符,它不会突出显示任何内容,但会匹配所有行。

如果您不想转义管道字符,可以使用扩展的正则表达式:

grep -E --color=auto 'word|$' file
Run Code Online (Sandbox Code Playgroud)


jll*_*gre 6

如果你没有 GNUgrep可用,这里有一些更便携的东西:

grepc()
{
  pattern=$1
  shift
  esc=$(printf "\033")
  sed 's"'"$pattern"'"'$esc'[32m&'$esc'[0m"g' "$@"
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码之一自定义颜色

30m black
31m red
32m green
33m yellow
34m blue
35m magenta
36m cyan
37m white
Run Code Online (Sandbox Code Playgroud)

使用7m而不是颜色代码会将字符串置于反向视频中。