如何在文件中搜索多行模式?

新手上路,请多包涵

我需要找到所有包含特定字符串模式的文件。想到的第一个解决方案是使用带有 xargs grepfind 管道:

 find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'

但是,如果我需要找到跨越多行的模式,我会被卡住,因为 vanilla grep 无法找到多行模式。

原文由 Oli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 447
2 个回答

所以我发现了 pcregrep ,它代表 Perl Compatible Regular Expressions GREP

-M 选项可以搜索跨越行边界的模式。

例如,您需要查找“ _name ”变量在下一行后面跟着“ _description ”变量的文件:

 find . -iname '*.py' | xargs pcregrep -M '_name.*\n.*_description'

提示:您需要在模式中包含换行符。根据您的平台,它可能是 ‘\n’、\r’、’\r\n’、…

原文由 Oli 发布,翻译遵循 CC BY-SA 4.0 许可协议

你为什么不去 awk

 awk '/Start pattern/,/End pattern/' filename

原文由 Amit 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题