将结果限制为±5行

时间:2014-03-06 11:06:30

标签: regex linux bash grep

我使用以下正则表达式在同一个文件中找到foobar的实例,这些实例可能在不同的行上:

$ pcregrep --color -Mi '(foo[\d\D]*bar)?(bar[\d\D]*foo)?' *

我怎么能将这个词限制在±5行?

我熟悉{0,5}量词,但我真的不知道如何设计查询。我正在考虑像这样丑陋的东西,但我似乎无法正确地设法:

[\d\D](\n[\d\D]){0,5}

以上结果返回以下结果:

pcregrep: Error in command-line regex at offset 26: nothing to repeat

2 个答案:

答案 0 :(得分:1)

我没有pcregrep,但这适用于我的(符合pcre标准)测试:(foo(?:.*\n){0,5}bar)

答案 1 :(得分:1)

以下内容可能适合您:

pcregrep -M '(foo.*(.*\n){0,4}.*?bar)?(bar.*(.*\n){0,4}.*?foo)?' filename

这会找到包含foobar的行,彼此相距5行。

编辑:根据评论添加替代方案:

pcregrep -M '(foo(\n*.*?){0,4}bar)?(bar(\n*.*?){0,4}foo)?' filename