因此,例如,sed单行删除所有单行换行符?
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然后的事情我会想跳过了:
However.
Our previous pair of newlines wouldn't.
因此,例如,sed单行删除所有单行换行符?
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然后的事情我会想跳过了:
However.
Our previous pair of newlines wouldn't.
这不是一个的sed解决方案 - 虽然你总是可以运行任何的sed通过S2P当然 - 但一个非常简单的解决方案使用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,则可以通过使用-CSD告诉perl它们是UTF-8来处理它们命令行开关:
% perl -CSD -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
我真的不清楚您可以通过删除段落的意思。我想你只是说在一个段落中加入一行。
如果是这样的 - 如果你想要做的是从段落换行挤,那么你要做到这一点:
% perl -i.orig -00 -ple 's/\s*\n\s*/ /g' file1 file2 file3
它可能看起来不像它的工作原理,但它:试试吧。
这是一个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.
你可以试试这个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-
只是为了澄清,你想删除的第一款新行,但不删除最后两个之间的空行? – 2011-04-22 01:06:21
@布莱恩是的,就是这样。但不幸的是,它迟到了,我犯了一个错字。抱歉。 – magnetar 2011-04-24 10:33:31