突出显示控制台搜索输出,同时显示整个命令输出

Der*_*ike 19 linux command-line

当我使用 eg 时,cat file.txt | grep --color=tty "pattern"我会突出显示我搜索的模式。当我想要更多关于每次命中的上下文时,grep 具有-A,-B-C参数。

但是,我想显示整个文件(或任何命令输出)并突出显示某个模式。是否存在这样的高亮命令或工具?

Den*_*son 22

在 unix.stackexchange.com上有一个答案有这个巧妙的技巧:

grep -E --color 'pattern|$' file.txt
Run Code Online (Sandbox Code Playgroud)

或者

grep --color 'pattern\|$' file.txt
Run Code Online (Sandbox Code Playgroud)

匹配您的模式或每行的行尾。仅突出显示图案。


Ada*_*kin 10

我喜欢ack

ack --passthru somepattern filename
Run Code Online (Sandbox Code Playgroud)

它就像 grep,但更好。它默认高亮显示,并使用--passthru选项显示整个文件(或标准输入),而不仅仅是匹配的行。

  • 如果您尝试将输出通过管道传输到 ack,例如从 `tail`,那么您也需要使用 `--filter` 选项。例如:`tail -f myLogFile | 确认 --filter --passthru 模式` (2认同)

cYr*_*rus 6

我还推荐使用less(或此类),但我想向您展示一个更具教学意义的解决方案。一旦你定义了这个函数:

函数高亮()
{
    sed "s/$1/`tput smso`&`tput rmso`/g" "${2:--}"
}

你可以这样使用它:

command | highlight pattern
highlight pattern file.txt
Run Code Online (Sandbox Code Playgroud)

注意:此版本区分大小写,要更改仅在表达式i之后添加g的内容sed