如何使用 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
)- 保存并退出 (
w
,q
)
导致:
ed -s file <<< $'/tutu/-1,/tutu/+1m1\nw\nq'