不能用一个替换多个空行

Jim*_*Jim 1 regex perl

为什么以下不能用一个替换多个空行?

$ cat some_random_text.txt  
foo   



bar   




test  
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$ cat some_random_text.txt | perl -pe "s/\n+/\n/g"
foo  



bar  





test  
Run Code Online (Sandbox Code Playgroud)

我试图将多个新行(即空行)替换为一个空的新行,但我使用的正则表达式不起作用,如您在示例代码段中所示.
我搞砸了什么?

预期结果是:

foo

bar

test
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 6

它不起作用的原因是-p告诉perl逐行处理输入,并且在一行中永远不会有多个输入\n.

更好的主意:

perl -00 -lpe 1
Run Code Online (Sandbox Code Playgroud)
  • -00:启用段落模式(输入记录由任意2个换行符序列终止).
  • -l:启用autochomp模式(输入记录分隔符会自动修剪,因此,由于我们处于段落模式,所有尾随换行符都将被删除,并且输出记录将被"\n\n"添加).
  • -p:启用自动输入/输出(为每个输入记录执行主代码; $_自动打印任何内容).
  • -e 1:使用无效的虚拟主程序.

总而言之,除了将段落终止符标准化为恰好两个换行符之外,它什么都不做.

  • 注意:这会在文件末尾留下两个换行符. (2认同)