Sono nuovo nell'uso di sed ma sto imparando rapidamente ad amarlo per la sua flessibilità generale nell'automazione. Sto cercando di eseguire uno script con vari controlli di sicurezza ogni volta che distribuisco un nuovo sistema e parte di ciò richiede il blocco di GRUB. Sto cercando di sbloccare l'opzione generale di Ubuntu dal menu di GRUB in modo che chiunque possa usarla in seguito senza password, mantenendo tutto il resto protetto da password.
detto questo, sto cercando di cercare nel file /boot/grub/grub.cfg una riga specifica e aggiungere –unrestricted a tale opzione. (Usiamo solo 16.04.03 quindi tutti i sistemi avrebbero teoricamente lo stesso file al momento dell'installazione)
La riga nel file è:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
E voglio che assomigli a:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
So che sed -i è per la modifica sul posto e s/ dovrebbe cercare. Ma oltre a ciò, sono perso sulla sintassi qui per farlo fare effettivamente ciò di cui abbiamo bisogno. Per quanto posso dire, quel posizionamento di -unrestricted è necessario perché credo che sarebbe più facile se non dovessimo fare una ricerca così lunga, ma ancora una volta sono nuovo nel sed e non sono sicuro. Qualcuno potrebbe aiutarmi con questo inserimento sed? Preferibilmente spiegami anche perché una sintassi diversa va dove va, quindi so per il futuro.
Risposta accettata:
Ecco il comando.
sed -i "s/--class os/--class os --unrestricted/" filename
Questo sostituirà la riga nel file senza richiedere un file temporaneo, grazie all'opzione -i.
Se non importa dove nella riga va il "–senza restrizioni", potrebbe essere più semplice.
sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename