我发现grep的——color=always标志非常有用。但是,grep只打印匹配的行(除非您要求上下文行)。假设它打印的每一行都有一个匹配项,那么高亮显示并不能增加尽可能多的功能。

我真的想猫一个文件,并看到整个文件与模式匹配突出显示。

是否有某种方法可以告诉grep打印正在读取的每一行,而不管是否有匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇标准grep是否可以做到这一点。


当前回答

grep的-z选项也非常灵活!

cat file1 | grep -z "pattern"

其他回答

您也可以创建别名。在你的.bashrc(或osx上的.bash_profile)中添加这个函数

function grepe {
    grep --color -E "$1|$" $2
}

你现在可以这样使用别名:"ifconfig | grepe inet"或"grepe css index.html"。

(PS:别忘了源~/。在当前会话上重新加载Bashrc)

下面是一个shell脚本,它使用Awk的gsub函数来替换你正在搜索的文本,使用正确的转义序列以亮红色显示:

#! /bin/bash
awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2

像这样使用它:

$ ./cgrep pattern [file]

不幸的是,它不具备grep的所有功能。

要了解更多信息,您可以参考Linux Journal上的文章“所以您喜欢颜色”

如果您想用不同的颜色突出显示几个模式,请参阅这个bash脚本。

基本用法:

echo warn error debug info 10 nil | colog

你可以改变图案和颜色,同时运行按一键,然后进入键。

或者你也可以使用银色搜索器

ag <search> --passthrough

这看起来像是恶意入侵。

grep "^\|highlight1\|highlight2\|highlight3" filename

这意味着-匹配行(^)或highlight1或highlight2或highlight3的开头。因此,您将高亮显示所有的highlight*模式匹配,甚至在同一行中。