我有一堆文件。每个文件都可以包含一个或多个符合以下正则表达式模式的匹配项:
(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