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

标签 regex 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 解决方案——当然你总是可以通过 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/

相关文章:

java - 使用正则表达式设计捕获十六进制数或整数

java - 操纵 IP 地址 - 在 '.' 字符处拆分字符串

regex - 查找具有确切字符数的单词

bash - 打印一行中每个单词的第一个字母

sed - 如何使用 sed 取消注释第二个模式匹配上的多行?

linux - 如何使用sed或awk处理指定列的内容?

sed 在下一行中复制子字符串

c - 24 小时时间格式正则表达式

java - 将 Unicode 宽字符更改为 ASCII

linux - 使用 sed 提取 HTML 数据