例如,
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然后我想跳过的事情:
However.
Our previous pair of newlines wouldn't.
答案 0 :(得分:6)
这不是 sed 解决方案 - 虽然您当然可以通过 s2p 运行任何 sed - 但使用 perl 是:
% perl -i.orig -ne 'print unless /^$/' file1 file2 file3
这样做的好处是可以扩展到空白行上的任何空格,如空格和制表符:
% perl -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
如果文件具有各种行结尾(如CR或CRLF),您也可以这样做,假设您运行的是perl 5.10或更高版本:
% perl -0777 -i.orig -ne 's/\R+/\n/' file1 file2 file3
将一个或多个Unicode行分隔符的所有序列规范化为单个换行符。
如果您的UTF-8文件可能(例如)其他空行中有U + 00A0 NON-BREAK SPACE,您可以通过使用告诉perl它们是UTF-8来处理它们。 CSD 命令行开关:
% perl -CSD -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
我真的不清楚删除一个段落是什么意思。我想你只是想在一个段落中加入一行。
如果是这样 - 如果您想要做的是从段落中挤出换行符,那么您希望这样做:
% perl -i.orig -00 -ple 's/\s*\n\s*/ /g' file1 file2 file3
它可能看起来不起作用,但确实如此:尝试一下。
答案 1 :(得分:1)
这是一个sed解决方案。
$ sed -n -e '1{${p;b};h;b};/^$/!{H;$!b};x;s/\(.\)\n/\1 /g;p' 5751270.txt
A paragraph would be removed let's say it contained only single newlines.
However.
Our previous pair of newlines wouldn't.
答案 2 :(得分:1)
您可以尝试使用此bash脚本
#!/bin/bash
exec 8<"file"
while read -r line <&8
do
if (( ${#line} > 0 )); then
read -r next <&8
if (( ${#next} > 0 ));then
continue
else
echo "$line"
echo "$next"
fi
fi
done
exec <&8-