我有一个纯文本文件:
line1_text
line2_text
我需要在两行之间添加一些空格。 添加10个空格很容易。
但是说我需要添加10000个空格,我将如何使用sed实现这一点?
P.S。这是出于实验目的
答案 0 :(得分:2)
毫无疑问,有一种sed
方法可以做到这一点,但由于sed
对算术没有任何自然的理解,因此它不是这个问题的自然选择。相比之下,awk
理解算术并且可以很容易地为n
的任何整数值打印空行n
次。
举个例子,考虑一下这个输入文件:
$ cat infile
line1_text
line2_text
此代码会在包含字符串line2_text
的任何行之前添加任意数量的空白行:
$ awk -v n=5 '/line2_text/{for (i=1;i<=n;i++)print""} 1' infile
line1_text
line2_text
如果您想要10,000个空行而不是5个空行,请将n=5
替换为n=10000
。
-v n=5
这定义了一个值为n
的awk变量5
。
/line2_text/{for (i=1;i<=n;i++)print""}
每当一行与正则表达式line2_text
匹配时,就会执行for
循环,并打印空行n
次。
1
这是打印行的简写,它会将输入的每一行打印到输出中。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r '/line1_text/{x;s/.*/ /;:a;ta;s/ /&\n/10000;tb;s/^[^\n]*/&&/;ta;:b;s/\n.*//;x;G}' file
这会将保留空间附加到第一行。通过基于2的幂的循环机制来操纵保持空间以保持所需数量的空间。这可能产生超过必要的余量,并且使用换行作为分隔符来切断剩余部分。
要将空格更改为换行符,请使用:
sed -r '/line1_text/{x;s/.*/ /;:a;ta;s/ /\n&/10000;tb;s/^[^\n]*/&&/;ta;:b;s/\n.*//;s/ /\n/g;x;G}' file
从本质上讲,使用它可以实现相同的目标(但是对于大数字来说它非常慢):
sed -r '/line1_text/{x;:a;/ {20}/bb;s/^/ /;ta;:b;x;G}' file