如何用Perl的正则表达式替换多个换行符?

Sim*_*ter 6 regex perl

我有一个包含空行的文档(\n \n).它们可以用sed删除:

echo $'a\n\nb'|sed -e '/^$/d'
Run Code Online (Sandbox Code Playgroud)

但是我如何用perl中的普通正则表达式做到这一点?以下任何内容都没有显示任何结果.

echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 13

你需要使用s/^\n\z//.输入是逐行读取的,因此您永远不会获得多个换行符.相反,消除不包含任何其他字符的行.你应该调用perl使用

perl -ne 's/^\n\z//; print'
Run Code Online (Sandbox Code Playgroud)

无需/s切换.


mob*_*mob 6

不打印空行的较窄问题更直接:

$(input) | perl -ne 'print if /\S/' 
Run Code Online (Sandbox Code Playgroud)

将输出除仅包含空格的行之外的所有行.