使用grep -P为字符串着色

Mar*_*ter 2 regex perl grep colors

我使用grep-P(Perl的正则表达式)上色字符串:

echo aaa bbb ccc ddd eee | grep --color=always -P "^[^#]*\K(bbb|ccc)|^"
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我想为字符串bbb和着色ccc。但是,grep仅使最后一个(ccc)变色。

如何修改我的正则表达式,以便两个字符串都匹配并被着色?

bob*_*ble 5

因为您的正则表达式仅匹配一种选择:^开始到ccc。但是您想要多个匹配项。这可以通过链接匹配以使用\Ganchor开始来实现。

此外,还需要通过附加[^#]* 懒惰?来避免跳过比赛。

echo aaa bbb ccc ddd eee | grep --color=always -P "\G[^#]*?\K(?:bbb|ccc)"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

以及多行字符串的regex变体。

(?:\G|\n)[^#]*?\K(?:bbb|ccc)
Run Code Online (Sandbox Code Playgroud)

在regex101上观看此演示


另一种方法是使用pcre动词(*SKIP)(*F)跳过所有内容,直到从#

#.*(*SKIP)(*F)|bbb|ccc
Run Code Online (Sandbox Code Playgroud)

在regex101上查看另一个演示