如何在文本文件的所有行之间添加 N 个空行?

How to add N blank lines between all rows of a text file?

我有一个看起来像

的文件
a
b
c
d

假设我想添加 N 行(在示例 3 中,但实际上我需要 20 或 100 行,具体取决于文件)

a


b


c


d 

我可以用sed在它们之间加一个空行

sed -i '0~1 a\' file

但是sed -i '0~3 a\' file每3行插入一行

您可以使用 GNU sed:

sed -i 'G;G;G' file

G;G;G 将在每个非最终行下方附加三个空行。

或者,awk

awk 'BEGIN{ORS="\n\n\n"};1'

看到 online sed and awk demo

如果需要动态设置换行数使用

nl="
"
awk -v nl="$nl" 'BEGIN{for(c=0;c<3;c++) v=v""nl;ORS=v};1' file > newfile

使用 GNU awk:

awk -i inplace -v lines=3 '{print; for(i=0;i<lines;i++) print ""}' file

更新 Ed 的提示(见评论):

awk -i inplace -v lines=3 '{print; for(i=1;i<=lines;i++) print ""}' file

更新(没有尾随空行):

awk -i inplace -v lines=3 'NR==1; NR>1{for(i=1;i<=lines;i++) print ""; print}' file

输出到file

a



b



c



d

使用 sed 和 corutils:

N=4
sed "$b;$(yes G\; | head -n$N)" infile

awk类似的技巧:

N=4
awk 1 RS="$(yes \n | head -n$N | tr -d '\n')" infile

这可能适合您 (GNU sed):

sed ':a;G;s/\n/&/2;Ta' file

这将在每行后面添加 2 个空行。

将 2 更改为您想要的每行之间的数字。

另一种选择(更有效?):

sed '1{x;:a;/^.\{2\}/!s/^/\n/;ta;s/.//;x};G' file