我使用以下正则表达式在同一个文件中找到foo
和bar
的实例,这些实例可能在不同的行上:
$ 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
答案 0 :(得分:1)
我没有pcregrep
,但这适用于我的(符合pcre标准)测试:(foo(?:.*\n){0,5}bar)
。
答案 1 :(得分:1)
以下内容可能适合您:
pcregrep -M '(foo.*(.*\n){0,4}.*?bar)?(bar.*(.*\n){0,4}.*?foo)?' filename
这会找到包含foo
和bar
的行,彼此相距5行。
编辑:根据评论添加替代方案:
pcregrep -M '(foo(\n*.*?){0,4}bar)?(bar(\n*.*?){0,4}foo)?' filename