Colors 使grep颜色仅捕获组

Colors 使grep颜色仅捕获组,colors,grep,Colors,Grep,如何仅对组匹配的grep中的文本进行着色 例如: printf "Jon Skeet" | grep -P "Sk(.)(?:\1t)" 打印出“Jon双向飞碟”(带“双向飞碟”颜色) 我希望它只给第一个“e”(即“jonskeet”)上色 编辑: printf "zazbzcz" | grep -P "(.)((?<=.)\1){3}" printf“zazbzcz”| grep-P”()((?grep为匹配的所有内容着色,您不能仅为捕获组着色。如果您只想突出显示单个字母,但使用相

如何仅对组匹配的grep中的文本进行着色

例如:

printf "Jon Skeet" | grep -P "Sk(.)(?:\1t)"
打印出“Jon双向飞碟”(带“双向飞碟”颜色)

我希望它只给第一个“e”(即“jonskeet”)上色


编辑

printf "zazbzcz" | grep -P "(.)((?<=.)\1){3}"

printf“zazbzcz”| grep-P”()((?

grep为匹配的所有内容着色,您不能仅为捕获组着色。如果您只想突出显示单个字母,但使用相同的正则表达式,您可以使用积极的前瞻性,这样它就不会成为匹配的一部分:

grep -P '(?<=Sk)(.)(?=\1t)'
grep-P'(?

对于第二部分:

printf "zazbzcz" | grep --color=always "z"
打印出你想要的结果。至少对我来说是这样

我还没有找到一个合适的正则表达式,只为第一个角色的第一个实例上色,而这正是你在第一部分想要的。我知道这一点

printf "Jon Skeet" | grep --color=always "e" 
打印出被着色的
e

编辑:以允许使用Bash的变量

string_name=zazbzcz
变量_name=z
printf$string_name|grep--color=始终$variable_name

我希望这对你有帮助

编辑2

下面是一个包含2个参数的bash脚本

第一个参数采用字符串或文本。 第二个参数接受要着色的字符

!/bin/bash
text=${1}
彩色字符=${!#}
printf$text| grep--color=始终为$char_着色

因此,如果您调用文件colorize.sh,并且已经使其可执行。(chmod)

您只需执行以下操作:

./colorize.sh zazbzcz

这是我能做的最好的回答问题,因为我理解它


同样,我希望它能有所帮助。

添加了测试case@AvdnhracNTAd9ex不确定测试用例试图匹配什么,但是如果需求真的是“突出显示匹配中的捕获组”“,那么grep就做不到了。你是在构建类似荧光灯的东西吗?我不需要使用grep,我只是觉得它会更简单。内置比第三方添加的新测试用例更受欢迎。只有在“z”和“e”是常量的情况下(但在我的情况下,它可能是“a”甚至“g”)才会起作用。”感谢Benjamin W编辑的.AvdnhracNTAd9ex,您可以将其设置为变量。我仍然不明白您正在尝试做什么。您是否有输入字符串并希望为特定字符着色?不太可能,因为在
Skeet
中,您只希望为第一个
e
着色。然后是什么?