如何使用 sed 在文件的每一行后插入 N+1 个新行

如何使用 sed 在文件的每一行后插入 N+1 个新行

我想改变这一点:

This is line1
This is line2
This is line3

This is line1
InsertedLine
This is line2
InsertedLine
InsertedLine
This is line3
InsertedLine
InsertedLine
InsertedLine

即在原文第一行后插入一次新行,第二行后插入两次,第三行后插入三次,以此类推。

答案1

以下是一种方法:

  • 用您想要的来为保持空间做好准备InsertedLine;我不确定最好的方法是什么,但有一个选项是将第一行模式空间交换到保持缓冲区,用替换(现在为空的)模式空间InsertedLine,然后交换回来:

     1{x;s/^/InsertedLine/;x}
    
  • 现在继续将保持空间附加到模式空间,打印结果,然后剥离所有内容直到最后InstertedLine并将其附加回保持空间:

     G;p;s/.*\n//;H
    

InsertedLine这样每次都会向保留空间添加新的内容。

因此

$ cat file
This is line1
This is line2
This is line3

然后

$ sed -n -e '1{x;s/^/InsertedLine/;x}' -e 'G;p;s/.*\n//;H' file
This is line1
InsertedLine
This is line2
InsertedLine
InsertedLine
This is line3
InsertedLine
InsertedLine
InsertedLine

当然,非 sed 选项可能更简单,例如。

awk '{for(i=0;i<FNR;i++) $0 = $0 ORS "InstertedLine"}1' file

或者

perl -pe 's/$/"\nInstertedLine" x $./e' file

相关内容