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

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

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


当前回答

使用着色程序: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

其他回答

也试一试:

exception 'pattern1|pattern2' FILE.txt | less -Sp 'pattern1|pattern2'

这将为您提供一个带有高亮模式/s的表格输出。

我把这个添加到我的.bash_aliases中:

highlight() {
  grep --color -E "$1|\$"
}

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

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

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

使用ripgrep,即rg: https://github.com/BurntSushi/ripgrep

rg - passthru……

颜色是默认的:

  rg -t tf -e  'key.*tfstate' -e dynamodb_table
       --passthru
       Print both matching and non-matching lines.

       Another way to achieve a similar effect is by modifying your pattern to
       match the empty string. 
       For example, if you are searching using rg foo then using 
       rg "^|foo" instead will emit every line in every file searched, but only
       occurrences of foo will be highlighted. 
       This flag enables the same behavior without needing to modify the pattern.

亵渎神明,没错,但格雷普已经沾沾自喜了。

安装ripgrep

你再也回不去了。

要在查看整个文件时突出显示模式,h可以这样做。

另外,它使用不同的颜色来代表不同的图案。

cat FILE | h 'PAT1' 'PAT2' ...

您还可以将h的输出输出到less -R,以便更好地读取。

如果要grep并为每个图案使用一种颜色,cxpgrep可能很适合。