如何在Perl中将4个连续的空行压缩成一行

Gra*_*ace 4 perl

我正在编写一个Perl脚本来读取日志,以便在看到任何连续的4行或更多空行时,通过删除空行将文件重新写入新日志.换句话说,我必须将任何4个连续的空白行(或更多行)压缩成一行; 但是文件中的1,2或3行的任何情况都必须保留格式.我试图在线获得解决方案,但我唯一能找到的是

perl -00 -pe ''
Run Code Online (Sandbox Code Playgroud)

要么

perl -00pe0  
Run Code Online (Sandbox Code Playgroud)

另外,我在vim中看到这样的示例来删除4个空行的块,:%s/^\n\{4}//这些行匹配我正在寻找的但是它在vim而不是Perl.任何人都可以帮助吗?谢谢.

Zai*_*aid 8

将4个以上连续的Unix风格EOL折叠为单个换行符:

$ perl -0777 -pi.bak -e 's|\n{4,}|\n|g' file.txt
Run Code Online (Sandbox Code Playgroud)

使用look-behind的另一种风味:

$ perl -0777 -pi.bak -e 's|(?<=\n)\n{3,}||g' file.txt
Run Code Online (Sandbox Code Playgroud)