对每个其他 grep 使用不同的颜色

对每个其他 grep 使用不同的颜色

我该如何配置grep才能更智能地突出显示颜色?通过使用不同的颜色?

问题:grep --color默认使用红色突出显示匹配项,但连续运行仍然难以读取。如果我运行grep三次,我希望第一次运行使用红色,第二次使用其他颜色(例如绿色),第三次再次使用红色,依此类推。

我之前读到过有一种技巧,每次运行时都会在终端中切换颜色,这样输出就会更清晰、更易读。但我忘了那是什么;是 zsh 还是 bash-script,还是其他 shell?

答案1

您可以将以下内容添加到您的.bashrc文件中:

my_grep() {
  if $GREP_USE_FIRST_COLOR
  then
    export GREP_USE_FIRST_COLOR=false
    export GREP_COLORS='ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  else
    export GREP_USE_FIRST_COLOR=true
    export GREP_COLORS='ms=01;33:mc=01;33:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  fi
  grep --color=auto "$@"
}
alias grep=my_grep

grep这将改变交互式 shell 中后续调用的匹配突出显示颜色,使其在粗体红色 ( ms=01;31) 和粗体黄色 ( ms=01;33) 之间变化。

grep 手册有关如何使用GREP_COLORS设置您喜欢的特定突出显示颜色的更多信息。

答案2

受到@Chriki 回答的启发

通过使用 PROMPT_COMMAND 作为钩子并更新每个提示的 GREP_COLOR 和 git 配置。

# .bashrc
# ...
# your alias, git prompt, git completetion, exports... etc
# ...
__grep_swap_color ()
{
  if [ -z "$GREP_COLOR" ]
  then
    export GREP_COLOR='1;32'
    git config --global color.grep.match blue
  else
    export GREP_COLOR=''
    git config --global color.grep.match red
  fi
}
PROMPT_COMMAND=$PROMPT_COMMAND';__grep_swap_color'
# End of file

答案3

您正在寻找在 bash 中为交替输出行着色的简单方法

如果答案看起来有点令人困惑,请按照此操作。

  1. 您必须使用一个脚本来自动为您执行此操作。打开“终端”。(在许多 Ubuntu 版本及其自身中,您可以按Alt+ Ctrl+T来调用它。)我假设您使用的是 Ubuntu。
  2. 使用您最喜欢的编辑器打开一个文本文件来编写脚本。我使用的是“nano”。像这样。这将打开一个名为my /home 的nano ~/grepc.sh文件( )。grepc.sh~/
  3. 将此 bash 脚本粘贴到其中。

    #!/bin/sh
    while read line
    do
      echo -e '\e[1;31m'"$line"
      read line
      echo -e '\e[1;32m'"$line"
    done
    echo -en '\e[0m'
    
  4. 如果你在 nano 中,按Ctrl+X将尝试关闭 nano,但在此之前它会询问你是否要保存文件。按在你的键盘上。

  5. 现在你必须让这个脚本可执行。输入命令chmod +x ~/grepc.sh
  6. 就是这样。现在将其与 grep 命令一起使用,如下所示:(ls ~/ | grep "test" | ./grepc.sh假设该命令在 /home 中执行)。

答案4

这是改编Kimvais 的解决方案 (Unrealist 也使用了该功能)。创建grepc.bash

while read line
do
     echo "$line"
     read line && echo "$line" | sed $'s/\(\e\[\([0-9]+;\))*\)31m/\\132m/g'
done

这用于sed将输入中红色的转义序列更改为绿色的转义序列。例如,使用

grep --color=always(随便)(随便)|(脚本路径)/grepc.bash

似乎grep --color实际上只有在写入终端(窗口)时才会使用颜色,而=always当写入管道时,您需要使用才能使其使用颜色。顺便说一句,将这样的个人实用程序放入 中~/bin,然后将其添加到您的 PATH 中是惯例,因此您在运行实用程序时无需指定它。

相关内容