sed 移动一行

knu*_*xyl 4 linux select sed move line

我只需要在 sed 中移动一行。我可以选择该行

sed -i '7s///'
Run Code Online (Sandbox Code Playgroud)

我需要将第 7 行向上移动 2 行,这样它将成为第 5 行。

如果没有复杂的脚本,我在互联网上找不到任何东西可以做到这一点,我找不到将特定行移动特定次数的简单解决方案。

mop*_*mop 7

seq 10|sed '5{N;h;d};7G'
Run Code Online (Sandbox Code Playgroud)

当到第 5 行时,将下一行(第 6 行)追加到模式空间中,然后将它们保存到保留空间中,并从模​​式空间中删除它们;到第 7 行,然后在第 7 行后面附加保留空间内容(“5\n6”);现在,模式空间是“7\n5\n6”;最后,sed将默认打印当前循环结束时的模式空间(如果没有“-n”参数)


Wil*_*ell 7

ed在这方面做得更好,因为它有一个“移动”命令,可以完全满足您的要求。要将第 7 行移动到第 4 行之后,只需执行7m4ed默认情况下不写回数据,因此您需要显式发出命令w来写入数据:

printf '7m4\nw\n' | ed input
Run Code Online (Sandbox Code Playgroud)

尽管使用更现代的工具可能更好:

ex -s -c 7m4 -c w -c q input
Run Code Online (Sandbox Code Playgroud)

  • 必须……抵制……冲动……开玩笑说“ex”比“ed”更现代。 (2认同)