如何移动列/(conky命令)向上1行 - 最好用sed

时间:2012-11-24 10:38:50

标签: 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/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行,丢弃第一行(或者,可选地,将第一行移动到最后一个位置)

编辑:在整个文件中多次以这种方式重复goto之后的数值。我想以所描述的方式改变它们。另外,配置文件包含前后的其他内容。

因为我刚刚使用sed,我想用sed解决它,但只要它可以进入linux shell脚本,它就不是必须的。

edit2:我希望配置文件也包含sed命令并不会让人感到困惑。 这与我正在寻找的解决方案无关。

1 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

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