Linux 如何将列/(conky命令)上移1行-最好使用sed

Linux 如何将列/(conky命令)上移1行-最好使用sed,linux,sed,conky,Linux,Sed,Conky,我的部分文件如下所示: ${goto 97}${exec sed -n '1p' $HOME/.config/conky/itl/raw2}# ${goto 194}${exec sed -n '2p' $HOME/.config/conky/itl/raw2}# ${goto 291}${exec sed -n '3p' $HOME/.config/conky/itl/raw2}# ${goto 388}${exec sed -n '4p' $HOME/.config/conky/itl/ra

我的部分文件如下所示:

${goto 97}${exec sed -n '1p' $HOME/.config/conky/itl/raw2}#
${goto 194}${exec sed -n '2p' $HOME/.config/conky/itl/raw2}#
${goto 291}${exec sed -n '3p' $HOME/.config/conky/itl/raw2}#
${goto 388}${exec sed -n '4p' $HOME/.config/conky/itl/raw2}#
${goto 485}${exec sed -n '5p' $HOME/.config/conky/itl/raw2}#
${goto 582}${exec sed -n '6p' $HOME/.config/conky/itl/raw2}#
${goto 679}${exec sed -n '7p' $HOME/.config/conky/itl/raw2}#
${goto 776}${exec sed -n '8p' $HOME/.config/conky/itl/raw2}#
${goto 873}${exec sed -n '9p' $HOME/.config/conky/itl/raw2}#
我想将“${goto nn}”上移1行,丢弃第一行(或者,可以选择将第一行移动到最后一行)

编辑:转到后的数值在整个文件中以这种方式重复数次。我想以所描述的方式全部更改它们。此外,配置文件还包含之前和之后的其他内容

由于我刚刚开始使用sed,我想用sed来解决它,但只要它能进入linux shell脚本,就不必这样做

edit2:我希望不要混淆配置文件也包含sed命令。 这与我正在寻找的解决方案无关。

这可能适合您(GNU-sed):

  • $!N
    对于除最后一行以外的所有行,将换行符和下一行附加到模式空间
  • s/^\(${goto[0-9]\+}\)(.*\n\)\(${goto[0-9]\+}\)/\3\2\1/
    对于以表达式
    ${goto[0-9]\+}
    开头的两个连续行,其中
    [0-9]\+
    表示一个或多个数字,记下这些字符串和中间的字符串,并将它们交换
  • P;D
    打印到第一个换行符
    \n
    ,然后删除到并包括该换行符。如果图案空间不为空,则不要自动读取下一行,而是从第一个命令开始新的循环(然后追加换行…)
这可能适合您(GNU-sed):

  • $!N
    对于除最后一行以外的所有行,将换行符和下一行附加到模式空间
  • s/^\(${goto[0-9]\+}\)(.*\n\)\(${goto[0-9]\+}\)/\3\2\1/
    对于以表达式
    ${goto[0-9]\+}
    开头的两个连续行,其中
    [0-9]\+
    表示一个或多个数字,记下这些字符串和中间的字符串,并将它们交换
  • P;D
    打印到第一个换行符
    \n
    ,然后删除到并包括该换行符。如果图案空间不为空,则不要自动读取下一行,而是从第一个命令开始新的循环(然后追加换行…)

谢谢!真管用!有人愿意详细说明一下吗?除了${goto[0-9]我不太明白。还有,为什么圆括号()?谢谢!那很有效!有人愿意详细说明吗?除了${goto[0-9]我不太明白。还有,为什么圆括号()?
sed '$!N;s/^\(${goto [0-9]\+}\)\(.*\n\)\(${goto [0-9]\+}\)/\3\2\1/;P;D' file