向文件添加任意数量的空格

时间:2018-02-10 02:43:59

标签: sed

我有一个纯文本文件:

line1_text
line2_text

我需要在两行之间添加一些空格。 添加10个空格很容易。

但是说我需要添加10000个空格,我将如何使用sed实现这一点?

P.S。这是出于实验目的

2 个答案:

答案 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