如何使用 sed 将一行行移动到另一个位置?

如何使用 sed 将一行行移动到另一个位置?

如何使用 sed 将一行行移动到另一个位置?

想象一个像这样的文件:

ligne
ligne
toto
tutu
titi

想要得到:

ligne
toto
tutu
titi
ligne 

已知的模式是“tutu”和目标行号“2”,以及我想要移动的文本块的起始行号。

所以我希望将其复制(与前 1 行和 1 连续行)到我已经知道的特定位置(第 n°2 行)

我试过 :

sed '2,5{ H ;d ; } ;  2{ p ; x ; }' file

但“粘贴”部分不起作用,因此它仅显示:

ligne

我真的不明白如何将缓冲区粘贴到一行的数值上;这就是我想要的。

答案1

好的,就像写的一样:

$ sed -n '1p; 2h; 3,/tutu/N; /tutu/ N; ${G; p;}' file
ligne
toto
tutu
titi
ligne

答案2

不是 sed,而是它的祖先编辑:

  • 匹配由以下给出的范围:
    • 搜索tutu然后减去一行
    • 搜索tutu然后添加一行
  • m将该块移至第 2 行(第 2 行之后1
  • 保存并退出 (wq

导致:

ed -s file <<< $'/tutu/-1,/tutu/+1m1\nw\nq'

相关内容