grep 可以跨行匹配一段文本的方法

grep 可以跨行匹配一段文本‌。grep 是一个强大的命令行文本搜索工具,通常用于单行匹配,但通过使用特定的选项和正则表达式,可以实现跨行匹配。 使用 Perl 兼容正则表达式进行跨行匹配 ‌使用...

grep 可以跨行匹配一段文本‌。grep 是一个强大的命令行文本搜索工具,通常用于单行匹配,但通过使用特定的选项和正则表达式,可以实现跨行匹配。

使用 Perl 兼容正则表达进行跨行匹配

  1. 使用 -P 选项和 `PCRE(Perl 兼容正则表达式)‌:

    • -P 选项允许使用 Perl 正则表达式。
    • -z 选项将整个文件作为一行处理,使用“零字节”而不是换行符。
    • (?s) 技巧打开 PCRE_DOTALL,使点字符 . 匹配任何字符,包括换行符。
    • 示例命令:grep -Pzo "(?s)from.*to" file‌。
  2. 使用 `pcre2grep‌:

    • pcre2grep 是另一个支持 Perl 兼容正则表达式的工具,可以更方便地处理多行匹配。
    • 使用 -M 参数可以实现多行匹配:pcre2grep -M'(?s)from.*to' file‌

例子: 我的文本样本如下:

attachments-2024-12-JfE5UXPS675f02398f79d,png


1,使用 grep -Pz '(?s)<div.*>.*</div>' a.txt   可以正常匹配 <div class > ......</div> 这段内容

前提一个把(?s) 技巧打开 PCRE_DOTALL,使点字符 . 匹配任何字符,包括换行符。加上才可以正常工作,不过通配符一定要有 . 没有点字符同样不起作用

比如把上边 grep -Pz '(?s)<div.*>.*</div>' a.txt   换成  grep -Pz '(?s)<div.*>\w+</div>' a.txt  就不起作用。


2, pcre2grep -M '(?s)<div class.*>.*</div>' a.txt 同样也需要打开 PCRE_DOTALL

  • 发表于 2024-12-16 00:22
  • 阅读 ( 31 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章