如何在命令行中使用perl样式的正则表达式匹配多行模式?

JnB*_*ymn 3 regex perl multiline command-line-tool

我经常使用正则表达式来转换文本.

要从命令行转换巨型文本文件,perl让我这样做:

perl -pe < in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

但这本质上是逐行的.偶尔,我想匹配多线的东西.

我怎么能在命令行中这样做?

Mil*_*ler 5

要覆盖文件而不是逐行处理,请使用-0777开关:

perl -0777 -pe 's/.../.../g' in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

作为记录在perlrun #Command Switches:

特殊值-00将导致Perl在段落模式下粘贴文件.任何值-0400或更高的值都会导致Perl整个文件,但按照惯例,该值-0777是通常用于此目的的值.

显然,对于大文件,这可能效果不好,在这种情况下,您需要编写某种类型的缓冲区来进行此替换.如果没有关于您意图的真实信息,我们无法提供更好的建议.