使用grep -P着色字符串

时间:2017-07-28 21:39:47

标签: regex perl colors grep

我正在使用grep-P(Perl正则表达式)来着色字符串:

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

在上面的示例中,我想要着色字符串bbbccc。但是,grep只对最后一个(ccc)着色。

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

2 个答案:

答案 0 :(得分:4)

因为你的正则表达式只匹配一个替代方案:From ^ start until ccc。但是你想要多场比赛。这可以通过链接匹配来开始使用\G anchor

此外,还需要通过附加[^#]*来制作? lazy,而不是跳过匹配。

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

enter image description here

多行字符串的正则表达式变体。

(?:\G|\n)[^#]*?\K(?:bbb|ccc)

See this demo at regex101

另一种方法可以是使用pcre verbs (*SKIP)(*F)来跳过任何事情直到#

的eol
#.*(*SKIP)(*F)|bbb|ccc

See another demo at regex101

答案 1 :(得分:1)

另一种方法是使用perl命令为你做匹配。

{{1}}