Как переместить столбец /(команда conky) вверх на 1 строку - желательно с помощью sed

Части моего файла выглядят так:

${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 строку, отбрасывая первую (или, опционально, переместить первую в последнюю позицию)

edit: числовые значения после goto повторяются таким образом по всему файлу несколько раз. Я хочу изменить их все описанным способом. Кроме того, файл конфигурации содержит другие вещи до и после.

Так как я только знакомлюсь с sed, я бы хотел решить эту проблему с помощью sed, но это не обязательно, если он может войти в скрипт оболочки linux.

edit2: я надеюсь, что это не смущает, что файл конфигурации также содержит команды sed. это не имеет ничего общего с решением, которое я ищу.

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 а затем удалить до и включая перевод строки. Если пространство шаблона не пустое, не читайте автоматически следующую строку, но начинайте новый цикл, начиная с первой команды (которая затем добавляет символ новой строки...).
Другие вопросы по тегам