在同一行中将线条与图案匹配n次

lod*_*dge 4 regex vim awk grep sed

我有一个文件,我需要过滤具有(或没有)N次出现的模式的行.也就是说,如果我的模式是字母,o而且我要匹配字母o恰好出现4次的行,则表达式应匹配以下示例行中的第一行但不匹配其他行:

foo foo  
foo  
foo foo foo   
Run Code Online (Sandbox Code Playgroud)

我可以用vim中的正则表达式,或sed,awk或任何其他工具来做到这一点.我用谷歌搜索,并没有发现任何人做过类似的事情.可能会做一个脚本或类似的东西来解析每一行.有没有人做过类似的事情?

谢谢

man*_*lds 5

你可以使用如下的正则表达式:

(?=(.*o){4})(?!(.*o){5,}).*
Run Code Online (Sandbox Code Playgroud)

Regexr - http://regexr.com?2toro

这应该适用于您想要的任何模式.例如,您想要找到其中包含四个foos的行,请使用:

(?=(.*foo){4})(?!(.*foo){5,}).*
Run Code Online (Sandbox Code Playgroud)

Regexr - http://regexr.com?2tosa