例如,
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然后我想跳过的事情:
However.
Our previous pair of newlines wouldn't.
最佳答案
这不是一个 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
它可能看起来不起作用,但确实有效:尝试一下。
关于regex - sed one-liner 删除所有单个换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751270/