sed: Extraer todas líneas que definen cada opción de un menú de Grub

Como ya sabéis, cada entrada de un menú de GRUB está definida por varias líneas que comienzan por "menuentry", tienen un título y, encerradas entre llaves van las opciones de arranque.

Por ejemplo:

menuentry "Clonezilla live (Default settings, VGA 800x600)"{
  search --set -f /live/vmlinuz
  linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/initrd.img
}

Si queremos extraer sólo los bloques de texto que definen entradas del menú de GRUB que inician Clonezilla, podemos utilizar el comando "sed" de la siguiente manera:

sed -n '/^menuentry.*Default.*/,/\}$/p' grub.cfg 

Y obtendremos algo como ésto:

menuentry "Clonezilla live (Default settings, VGA 800x600)"{
  search --set -f /live/vmlinuz
  linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/initrd.img
}
menuentry "Clonezilla live (Default settings, VGA 1024x768)"{
  search --set -f /live/vmlinuz
  linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=791 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/initrd.img
}
menuentry "Clonezilla live (Default settings, VGA 640x480)"{
  search --set -f /live/vmlinuz
  linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=785 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/initrd.img
}
menuentry "Clonezilla live (Default settings, KMS)"{
  search --set -f /live/vmlinuz
  linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=791 ip= net.ifnames=0  nosplash
  initrd /live/initrd.img
}

Si repasáis el comando, veréis que le estamos diciendo a sed que extraiga el bloque de texto:

  • Que comience por "menuentry" y contenga la palabra "Default"=> ^menuentry.*Default.*
  • Y termine con "}" => \}$

Be the first to comment

Por favor acceder para comentar.