Как переместить часть файла в его конец
-
18-09-2019 - |
Вопрос
rpm автоматически помещает новое установленное ядро в качестве первого варианта.Однако я хочу переместить его как последний - в конец файла.
Конфигурационный файл Grub выглядит следующим образом:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.29.6-217.2.7.fc11.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.29.6-217.2.7.fc11.x86_64 ro root=/dev/mapper/main-root rhgb quiet
initrd /initrd-2.6.29.6-217.2.7.fc11.x86_64.img
title Fedora (2.6.29.6-217.2.3.fc11.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.29.6-217.2.3.fc11.x86_64 ro root=/dev/mapper/main-root rhgb quiet
initrd /initrd-2.6.29.6-217.2.3.fc11.x86_64.img
title Fedora (2.6.29.6-213.fc11.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.29.6-213.fc11.x86_64 ro root=/dev/mapper/main-root rhgb quiet
initrd /initrd-2.6.29.6-213.fc11.x86_64.img
Моя цель - довести первый вариант (217.2.3) до конца.Теперь я придумываю, как его удалить:
sed -e '/(2.6.29.6-217.2.7.fc11.x86_64)/,+3d' /boot/grub/menu.lst
команда p выводит только текущую строку (не как в vim, где это означает вставить).
Есть ли у вас какие-нибудь идеи, как автоматически переместить эту часть файла в конец?
Решение
Я должен ответить сам.:-)
sed '/\(2.6.18-157.el5\)/,+4 { H; d; }; $ { p; x; }' /boot/grub/menu.lst
Если вы не владеете sed свободно (я тоже), есть более подробная версия
sed '
/\(2.6.18-157.el5\)/,+3 { #Find line which contains version of our kernel in parentheses and took also 3 following lines
H # Append this line into buffer
d # Delete line
}
$ { # On the last line
p # Print current line
x # Change current line with buffer and vice versa
# Afterwards sed print current line => in our case deleted line
}' /boot/grub/menu.lst
Другие советы
Очень похожая задача была подробно рассмотрена здесь
Да, есть некоторое удовлетворение от хорошо проработанной команды sed, но я думаю, что предпочел бы использовать редактор, чтобы видеть строки, которые я собирался перемещать, и не беспокоиться о неправильных номерах строк в команде.