我正在使用grep
和-P
(Perl正则表达式)来着色字符串:
echo aaa bbb ccc ddd eee | grep --color=always -P "^[^#]*\K(bbb|ccc)|^"
在上面的示例中,我想要着色字符串bbb
和ccc
。但是,grep只对最后一个(ccc
)着色。
如何修改我的正则表达式,以便两个字符串匹配并着色?
答案 0 :(得分:4)
因为你的正则表达式只匹配一个替代方案:From ^
start until ccc
。但是你想要多场比赛。这可以通过链接匹配来开始使用\G
anchor。
此外,还需要通过附加[^#]*
来制作?
lazy,而不是跳过匹配。
echo aaa bbb ccc ddd eee | grep --color=always -P "\G[^#]*?\K(?:bbb|ccc)"
多行字符串的正则表达式变体。
(?:\G|\n)[^#]*?\K(?:bbb|ccc)
另一种方法可以是使用pcre verbs (*SKIP)(*F)
来跳过任何事情直到#
#.*(*SKIP)(*F)|bbb|ccc
答案 1 :(得分:1)
另一种方法是使用perl命令为你做匹配。
{{1}}