如何在 sed 中用单个空行替换连续的空行?

如何在 sed 中用单个空行替换连续的空行?

我有一个文件喜欢有连续的空行(更清楚地说,只有空白行)。我想用一个来代替所有的。

我更愿意sed(恕我直言,这个任务是awk微不足道的)。

答案1

要压缩连续的空行(零字符行),您可以使用N;P;D cycle:

sed '$!N;/^\n$/!P;D' infile

要压缩连续的空白行,只需更改正则表达式以考虑可能的空白:

sed '$!N;/^[[:blank:]]*\n[[:blank:]]*$/!P;D' infile

答案2

如果你有GNU sed可用(并且它不会与您的脚本冲突),您可以使用-z零分隔行的标志,然后使用更简单的正则表达式,例如:

sed -z 's/\n[\n ]*/\n/g' infile

请注意,这-z不是POSIX。

相关内容