如何在文本文件的所有行之间添加 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'
如果需要动态设置换行数使用
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
我有一个看起来像
的文件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'
如果需要动态设置换行数使用
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