我如何仅 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>
注意:它始终只是一个需要突出显示的字符 (在一个模糊的情况下,任何一个都可以突出显示)
答案 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
根据我的理解,这是我能回答这个问题的最佳方法。
再次,我希望它有所帮助。