我使用以下正则表达式来查找同一文件中可能位于不同行的 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
最佳答案
以下内容可能适合您:
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
关于regex - 将结果限制为 ±5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22222606/