我有一个包含空行(\n\n)的文档。可以使用sed命令来删除它们:
echo $'a\n\nb'|sed -e '/^$/d'
但是我该如何在Perl中使用普通的正则表达式来实现呢?像下面这样的任何东西都没有显示任何结果。
echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'
您需要使用s/^\n\z//
。输入是逐行读取的,因此您永远不会得到多个换行符。相反,消除不包含其他字符的行。您应该使用以下方式调用perl
:
perl -ne 's/^\n\z//; print'
不需要使用/s
开关。
perl -pne 's/^\n\z//'
。使用 -p
选项时不需要 print
。 - steveb不打印空行的问题更为简单:
$(input) | perl -ne 'print if /\S/'
将输出除了只包含空格的行之外的所有行。
-p
选项的perl
每次只处理一行。解决方法是告诉perl
一次读取多行输入。其中一种方法是:echo $'a\n\nb' | perl -pe 'BEGIN{$/=undef}; s/\n\n/\n/'
这里 $/
是记录分隔符变量,它告诉perl如何将输入流解析为行。
cat -s
会更快且更兼容。 - Marianman cat
。 - Sinan Ünür