Soy nuevo en el uso de sed, pero aprendo rápidamente a amarlo por su flexibilidad general en la automatización. Busco ejecutar un script con varios controles de seguridad cada vez que implemento un nuevo sistema, y parte de eso requiere que bloquee GRUB. Estoy buscando desbloquear la opción general de Ubuntu desde el menú de GRUB para que cualquiera pueda usarla después sin contraseña, manteniendo todo lo demás protegido con contraseña.
Dicho esto, busco buscar en el archivo /boot/grub/grub.cfg una línea específica y agregar –sin restricciones a esa opción. (Solo usamos 16.04.03, por lo que todos los sistemas teóricamente tendrían el mismo archivo al momento de la instalación)
La línea en el archivo es:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
Y quiero que se vea como:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
Sé que sed -i es para editar en el lugar y s/ debería buscar. Pero más allá de eso, estoy perdido en la sintaxis aquí para hacer que realmente haga lo que necesitamos. Por lo que puedo decir, ese posicionamiento de –unrestricted es necesario ya que creo que sería más fácil si no tuviéramos que tener una búsqueda tan larga, pero nuevamente soy nuevo en sed y no estoy seguro. ¿Alguien podría ayudarme con esta inserción de sed? Preferiblemente, también explíqueme por qué la sintaxis diferente va donde va, así lo sé para el futuro.
Respuesta aceptada:
Aquí está el comando.
sed -i "s/--class os/--class os --unrestricted/" filename
Esto reemplazará la línea en el archivo sin requerir un archivo temporal, debido a la opción -i.
Si no importa en qué parte de la línea va "-sin restricciones", esto podría ser más simple.
sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename