regex - 将结果限制为 ±5 行

标签 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

最佳答案

以下内容可能适合您:

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

关于regex - 将结果限制为 ±5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22222606/

相关文章:

ruby-on-rails - Red Hat Linux + Rails + RVM:Gem::Installer::ExtensionBuildError:错误:无法构建 gem native 扩展

linux - 在 GNU/Linux 中如何让程序跳过任务栏(任务列表)?

git - 修复 git rebase

php - 用 PHP 改变 .htaccess - 删除重写规则

PHP难的preg_match

linux - 查找已编译的可执行文件的版本

Bash:测试多个变量的相互相等性?

Python使用正则表达式从文本中提取数字

regex - RewriteRule 无法编译正则表达式

linux - shell 脚本中未捕获输出