我该如何配置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 中为交替输出行着色的简单方法。
如果答案看起来有点令人困惑,请按照此操作。
- 您必须使用一个脚本来自动为您执行此操作。打开“终端”。(在许多 Ubuntu 版本及其自身中,您可以按Alt+ Ctrl+T来调用它。)我假设您使用的是 Ubuntu。
- 使用您最喜欢的编辑器打开一个文本文件来编写脚本。我使用的是“nano”。像这样。这将打开一个名为my /home 的
nano ~/grepc.sh
文件( )。grepc.sh
~/
将此 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'
如果你在 nano 中,按Ctrl+X将尝试关闭 nano,但在此之前它会询问你是否要保存文件。按是在你的键盘上。
- 现在你必须让这个脚本可执行。输入命令
chmod +x ~/grepc.sh
。 - 就是这样。现在将其与 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 中是惯例,因此您在运行实用程序时无需指定它。