使grep颜色仅捕获组

时间:2017-05-28 01:15:10

标签: colors grep

我如何仅 grep 中的颜色文字与相匹配?

示例:

printf "Jon Skeet" | grep -P "Sk(.)(?:\1t)"

打印出“Jon Skeet ”(“Skeet”为彩色)。

我希望它只为第一个'e'着色(即“Jon Sk e et”)。


修改

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

什么都不打印,但我怎么打印出来

ž一个的ž B'强>ž C ž

编辑2:

也许我不清楚。

这将在一个脚本中运行,我希望它突出显示如下(因此我不知道它将在哪里和哪个字母或数字):

取值 d 取值˚F取值 I 取值Ĵ

ASD的瓦特的 XA的电子的 doxwy

pqk的 5 ž的 5 X 5 C 5 瓦特的 5 QAS < / p>

注意:它始终只是一个需要突出显示的字符 (在一个模糊的情况下,任何一个都可以突出显示)

2 个答案:

答案 0 :(得分:0)

Grep为所有匹配的颜色着色,你不能只为捕捉组颜色。如果您只想突出显示该单个字母,但使用相同的正则表达式,则可以使用正向预测,这样它就不会成为匹配的一部分:

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

答案 1 :(得分:0)

第二部分:

printf "zazbzcz" | grep --color=always "z"

打印出您想要的结果。它至少对我有用。

我还没有找到正确的正则表达式,只为第一部分的第一个实例着色。我知道

printf "Jon Skeet" | grep --color=always "e" 

打印出两个e被着色。

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

string_name=zazbzcz variable_name=z printf $string_name | grep --color=always $variable_name

我希望这会对你有所帮助。

修改2

以下是一个带有2个参数的bash脚本。

第一个参数采用字符串或文本。 第二个参数使用一个字符进行着色。

#!/bin/bash text=${1} char_colorized=${!#} printf $text | grep --color=always $char_colorized

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

您需要做的就是以下内容:

./ colorize.sh zazbzcz z

根据我的理解,这是我能回答这个问题的最佳方法。

再次,我希望它有所帮助。