• 如何使用 grep 跨多行查找模式匹配


    在这里插入图片描述
    grep 是一个命令行文本搜索实用程序,能够在文件和其他类型的输入中查找模式和字符串。大多数匹配只匹配一行,但跨多行匹配通常很有用。

    使用 grep 匹配多个新行

    处理多行匹配是一件很困难的事情grep 。一个更好的工具是awk or sed,它们都可以自然地处理多行输入。使用两个带有逗号的表达式将匹配这两个模式之间的所有内容。

    awk '/from/,/to/' file
    sed -n '/from/,/to/p' file
    
    • 1
    • 2

    在这里插入图片描述
    仍然可以在 中处理此问题grep,但是该命令非常笨拙。

    grep -Pz '(?s)from.*n.*to' test
    
    
    • 1
    • 2

    在这里插入图片描述
    这做了几件事:

    1. -P打开Perl 兼容的正则表达式。
    2. -z 将整个文件作为一行提供,使用“零字节”而不是换行符。这允许 grep 将整个事情作为一行处理。 (?s) 打开 PCRE_DOTALL,使. 字符匹配任何字符,包括换行符。
    3. from 是首发比赛。
    4. .n. 将匹配所有内容,直到to,这是结束匹配。
      总体而言,这将为脚本目的完成,但如果您自己输入,请记住很多。此外,使用该-o 标志仅打印匹配项也会打印出尾随零字节字符,这可能会导致其他问题。

    使用 pcre2grep 代替(Perl 兼容的 grep)

    正grep 则不是完成这项工作的最佳工具,还有一种替代方法pcre2grep ,即开箱即用地支持 Perl 兼容正则表达式,并且能够非常轻松地匹配多行正则表达式。

    它可能已安装在您的系统上,但如果没有,您可以从包管理器中获取它:

    sudo apt install pcre2-utils
    
    • 1

    然后,您只需要使用-M 参数运行它。

    pcre2grep -M 'from(n|.)*to' file
    
    
    • 1
    • 2

    在这里插入图片描述
    请注意,这仍然需要您手动将“换行符或任何字符”与(n|.)* . 或者,您可以使用该(?s) 技巧打开 PCRE_DOTALL 并使点字符也匹配换行符。

    pcre2grep -M '(?s)from.*to' file
    
    
    • 1
    • 2
  • 相关阅读:
    知识储备--基础算法篇-二叉树
    【毕业设计】水果图像识别系统 - 深度学习 OpenCV python
    WnvHtmlToPdf-x64-v16.0--Crack
    halcon算子1、dev_open_window
    只需要高中数学知识就可以入门计算机图形学啦
    化繁为简,聊一聊复制状态机系统架构抽象
    深度学习模型压缩方法概述
    配置OpenCV
    异地监控如何实现远程访问?贝锐蒲公英无需公网IP即可实现
    LeetCode每日一题——1732. 找到最高海拔
  • 原文地址:https://blog.csdn.net/wlcs_6305/article/details/126002601