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

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

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


当前回答

我想推荐ack——它比grep更好,是程序员的强大搜索工具。

$ ack --color --passthru --pager="${PAGER:-less -R}" pattern files
$ ack --color --passthru pattern files | less -R
$ export ACK_PAGER_COLOR="${PAGER:-less -R}"
$ ack --passthru pattern files

我喜欢它,因为它默认为递归搜索目录(并且比grep -r聪明得多),支持完整的Perl正则表达式(而不是POSIXish正则表达式(3)),并且在搜索许多文件时具有更好的上下文显示。

其他回答

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

ag <search> --passthrough

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

基本用法:

echo warn error debug info 10 nil | colog

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

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

cat file1 | grep -z "pattern"

你可以从https://github.com/kepkin/dev-shell-essentials上使用我的高亮脚本

它比grep更好,因为您可以用自己的颜色突出显示每个匹配。

$ command_here | highlight green "input" | highlight red "output"

这是一种方法,

wc -l filename

会给你行数,比如NN,你能做什么

grep -C NN --color=always filename