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

时间:2010-05-27 19:04:54

标签: regex perl

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

echo $'a\n\nb'|sed -e '/^$/d'

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

echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'

3 个答案:

答案 0 :(得分:13)

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

调用perl
perl -ne 's/^\n\z//; print'

无需/s切换。

答案 1 :(得分:6)

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

$(input) | perl -ne 'print if /\S/' 

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

答案 2 :(得分:3)

输入是三个单独的行,带perl选项的-p仅处理一行。

解决方法是告诉perl一次输入多行输入。一种方法是:

echo $'a\n\nb' | perl -pe 'BEGIN{$/=undef}; s/\n\n/\n/'

此处$/record separator variable,它告诉perl如何将输入流解析为行。