Come spostare parte del file fino alla fine
-
18-09-2019 - |
Domanda
rpm inserisce automaticamente un nuovo kernel installato come prima opzione.Tuttavia, voglio spostarlo come ultimo, alla fine del file.
Il file di configurazione di Grub è simile al seguente:
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
Il mio obiettivo è spostare la prima opzione (217.2.3) alla fine.Ora capisco come eliminarlo:
sed -e '/(2.6.29.6-217.2.7.fc11.x86_64)/,+3d' /boot/grub/menu.lst
Il comando p stampa solo la riga corrente (non come in vim, dove significa incolla).
Hai qualche idea su come spostare automaticamente questa parte del file alla fine?
Soluzione
Devo rispondermi da solo.:-)
sed '/\(2.6.18-157.el5\)/,+4 { H; d; }; $ { p; x; }' /boot/grub/menu.lst
Se non parli fluentemente sed (nemmeno io), esiste una versione più dettagliata
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
Altri suggerimenti
Un compito molto simile è stato trattato ampiamente qui
Sì, c'è qualche soddisfazione in un comando sed ben realizzata, ma penso che mi tendono ad utilizzare un editor, così ho potuto vedere le linee che stavo per muoversi, e non devono preoccuparsi di ottenere i numeri di riga sbagliato in un comando.