sed: Extraer solo las líneas que definen la primera opción de un menú de Grub

En el post anterior hemos visto cómo extraer todas líneas que definen cada opción de un menú de Grub. En éste, vamos a ver cómo extraer sólo el primer bloque de texto.

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 el primer bloque de texto que define la primera entrada del menú de GRUB que inicia Clonezilla, podemos utilizar el comando "sed" de la siguiente manera:

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

Y el resultado será el siguiente:

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  splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  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.*
  • Termine con "}" => \}$
  • Que lo imprima y que termine si se ha encontrado el patrón => {p;/^\}$/q}

Be the first to comment

Por favor acceder para comentar.