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

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

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


当前回答

也试一试:

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

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

其他回答

以下是我的方法,灵感来自@kepkin的解决方案:

# Adds ANSI colors to matched terms, similar to grep --color but without
# filtering unmatched lines. Example:
#   noisy_command | highlight ERROR INFO
#
# Each argument is passed into sed as a matching pattern and matches are
# colored. Multiple arguments will use separate colors.
#
# Inspired by https://stackoverflow.com/a/25357856
highlight() {
  # color cycles from 0-5, (shifted 31-36), i.e. r,g,y,b,m,c
  local color=0 patterns=()
  for term in "$@"; do
    patterns+=("$(printf 's|%s|\e[%sm\\0\e[0m|g' "${term//|/\\|}" "$(( color+31 ))")")
    color=$(( (color+1) % 6 ))
  done
  sed -f <(printf '%s\n' "${patterns[@]}")
}

这接受多个参数(但不允许自定义颜色)。例子:

$ noisy_command | highlight ERROR WARN

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

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

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

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

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

正如grep -E '|pattern'已经被建议的那样,只是想澄清一下,它也可以突出显示整行。

例如:tail -f somelog | grep——color -E '| \[2\]。*'(特别是-E '|部分):

也试一试:

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

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

另一种肮脏的方式:

grep -A80 -B80 --color FIND_THIS IN_FILE

我做了一个

alias grepa='grep -A80 -B80 --color'

把bashrc打印出来。