我发现grep的——color=always标志非常有用。但是,grep只打印匹配的行(除非您要求上下文行)。假设它打印的每一行都有一个匹配项,那么高亮显示并不能增加尽可能多的功能。
我真的想猫一个文件,并看到整个文件与模式匹配突出显示。
是否有某种方法可以告诉grep打印正在读取的每一行,而不管是否有匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇标准grep是否可以做到这一点。
我发现grep的——color=always标志非常有用。但是,grep只打印匹配的行(除非您要求上下文行)。假设它打印的每一行都有一个匹配项,那么高亮显示并不能增加尽可能多的功能。
我真的想猫一个文件,并看到整个文件与模式匹配突出显示。
是否有某种方法可以告诉grep打印正在读取的每一行,而不管是否有匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇标准grep是否可以做到这一点。
当前回答
或者你也可以使用银色搜索器
ag <search> --passthrough
其他回答
这里有一些类似的东西。很有可能,无论如何你都会用得更少,所以试试这个:
less -p pattern file
它将突出显示该模式,并跳转到该模式在文件中第一次出现的位置。
你可以用n跳到下一个出现点,用p跳到前一个出现点,用q退出。
另一个回答提到了grep的-Cn开关,其中包含n行Context。当egrep模式看起来太复杂,或者当我在一台没有安装rcg和/或ccze的机器上时,我有时会用n=99作为一种快速而肮脏的方式来获得[至少]满屏的上下文。
我最近发现ccze是一个更强大的着色剂。我唯一的抱怨是它是面向屏幕的(就像less一样,我从不使用这个原因),除非你为“原始ANSI”输出指定-A开关。
上面提到的RCG +1。它仍然是我的最爱,因为它是如此简单,自定义在一个别名。类似这样的东西通常在我的~/.bashrc中:
alias tailc='tail -f /my/app/log/file | rcg send "BOLD GREEN" receive "CYAN" error "RED"'
使用着色程序:http://nojhan.github.io/colout/
它的目的是为文本流添加颜色高亮。给定一个正则表达式和一个颜色(例如:"red"),它会重新生成匹配突出显示的文本流。例句:
# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile
你可以链接多个调用来添加多个不同的颜色高亮:
tail -f /var/log/nginx/access.log | \
colout ' 5\d\d ' red | \
colout ' 4\d\d ' yellow | \
colout ' 3\d\d ' cyan | \
colout ' 2\d\d ' green
或者你可以通过使用带有N个组的正则表达式(正则表达式的括号部分)来实现同样的事情,后面跟着一个逗号分隔的N种颜色列表。
vagrant status | \
colout \
'\''(^.+ running)|(^.+suspended)|(^.+not running)'\'' \
green,yellow,red
如果您想用不同的颜色突出显示几个模式,请参阅这个bash脚本。
基本用法:
echo warn error debug info 10 nil | colog
你可以改变图案和颜色,同时运行按一键,然后进入键。
要在查看整个文件时突出显示模式,h可以这样做。
另外,它使用不同的颜色来代表不同的图案。
cat FILE | h 'PAT1' 'PAT2' ...
您还可以将h的输出输出到less -R,以便更好地读取。
如果要grep并为每个图案使用一种颜色,cxpgrep可能很适合。