我文件的部分内容如下:
${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命令并不会让人感到困惑。 这与我正在寻找的解决方案无关。
答案 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
,然后删除最多并包含换行符。如果模式空间不为空,则不会自动读取下一行,而是从第一个命令开始一个新的循环(然后添加换行符......)。