我有一个包含空行的文档(\ n \ n)。可以使用sed删除它们:
echo $'a\n\nb'|sed -e '/^$/d'
但是我如何用perl中的普通正则表达式做到这一点?以下任何内容都没有显示任何结果。
echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'
答案 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如何将输入流解析为行。