为什么以下不能用一个替换多个空行?
$ 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)
它不起作用的原因是-p告诉perl逐行处理输入,并且在一行中永远不会有多个输入\n.
更好的主意:
perl -00 -lpe 1
Run Code Online (Sandbox Code Playgroud)
-00:启用段落模式(输入记录由任意2个换行符序列终止).-l:启用autochomp模式(输入记录分隔符会自动修剪,因此,由于我们处于段落模式,所有尾随换行符都将被删除,并且输出记录将被"\n\n"添加).-p:启用自动输入/输出(为每个输入记录执行主代码; $_自动打印任何内容).-e 1:使用无效的虚拟主程序.总而言之,除了将段落终止符标准化为恰好两个换行符之外,它什么都不做.