sed one-liner删除所有单个换行符?

mag*_*tar 2 regex sed

所以,例如,

A paragraph's newlines would be removed let's say
it contained only single
newlines.
Run Code Online (Sandbox Code Playgroud)

然后我想跳过的东西:

However.

Our previous pair of newlines wouldn't.
Run Code Online (Sandbox Code Playgroud)

tch*_*ist 6

它不是一个sed解决方案 - 虽然你当然可以通过s2p运行任何sed - 但使用perl的一个非常简单的解决方案是:

% perl -i.orig -ne 'print unless /^$/' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

这样做的优点是可以扩展到空白行上的任何空格,如空格和制表符:

% perl -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

如果文件具有各种行结尾(如CR或CRLF),您也可以这样做,假设您运行的是perl 5.10或更高版本:

% perl -0777 -i.orig -ne 's/\R+/\n/' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

这会将一个或多个Unicode行分隔符的所有序列规范化为单个换行符.

如果您的UTF-8文件可能(例如)其他空行中有U + 00A0 NON-BREAK SPACE,您可以通过使用-CSD命令行开关告诉perl它们是UTF-8来处理它们:

% perl -CSD -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

UPDATE

删除段落我真的不清楚你的意思.我认为你只是想加入段落中的行.

如果是这样 - 如果您想要做的是从段落中挤出换行符,那么您希望这样做:

% perl -i.orig -00 -ple 's/\s*\n\s*/ /g' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

它可能看起来不像它有效,但它确实:尝试它.