如何在多个文件中找到多行部分正则表达式匹配?

如何在多个文件中找到多行部分正则表达式匹配?

我有一堆文件。每个文件都可以包含一个或多个符合以下正则表达式模式的匹配项:

(foo)([\s\S]+)(bar)

匹配项可以包含换行符/多行。

我想将所有匹配的组提取$2到文件中或将其打印到控制台。

我尝试用grep,但没有效果,因为它grep是逐行处理文本的。

概括:

因此,我需要以下内容:

  • 在多个文件中搜索。
  • 正则表达式搜索。
  • 提取特定匹配组。

是否有一个工具(用于 GUI 或 CLI)可以满足此要求?

答案1

这里有一个使用 Perl 单行代码完成此任务的方法。
以下代码处理当前目录中名称以 开头的文件file,您必须根据要处理的文件进行调整。

perl -ane 'if (/foo/.../bar/) {print $_ unless /foo|bar/}' file*

解释:

if (/foo/.../bar/) {    # if the current line is between foo and bar (included)
    print $_                # print the current line
        unless /foo|bar/        # unless it matches foo or bar
}                       # endif

相关内容