![如何用特定的非空行替换多个空行?](https://linux22.com/image/83348/%E5%A6%82%E4%BD%95%E7%94%A8%E7%89%B9%E5%AE%9A%E7%9A%84%E9%9D%9E%E7%A9%BA%E8%A1%8C%E6%9B%BF%E6%8D%A2%E5%A4%9A%E4%B8%AA%E7%A9%BA%E8%A1%8C%EF%BC%9F.png)
样本输入是
1
2
3
4
5
6
7
8
9
预期输出是
1
2
3
---
4
5
---
6
7
8
---
9
答案1
单程:
cat -s file | sed 's/^$/---/'
来自 cat 的手册页:
-s, --squeeze-blank
never more than one single blank line
cat
挤压空白行后,sed
将空白替换为---
答案2
使用 AWK 的多行记录功能(空 RS)的 POSIX 兼容方法:
awk 1 RS= ORS='\n---\n' file
这会产生与您所需的输出相同的输出,除了最后的“---”行。如果这种差异不可接受,可以使用 sed 过滤器消除:
... | sed '$d'