grep: Extraer líneas que contengan un patrón, anteriores y/o posteriores

La forma más sencilla de extraer las líneas que contengan un patrón junto con las anteriores y/o posteriores es usar las opciones -A (After), -B (Before) y -C (Context) del comando grep.

Por ejemplo, supongamos que quiero extraer las claves públicas de los repositorios de virtualbox almacenadas en mi máquina:

apt-key list | grep -i virtualbox -B 2
pub   rsa4096 2016-04-22 [SC]
      B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
uid        [desconocida] Oracle Corporation (VirtualBox archive signing key) 
--
pub   dsa1024 2010-05-18 [SC]
      7B0F AB3A 13B9 0743 5925  D9C9 5442 2A4B 98AB 5139
uid        [desconocida] Oracle Corporation (VirtualBox archive signing key) 

Si desglosamos la combinación de comandos anteriores:

  • apt-key list: Lista todas las claves de los repositorios.
  • grep -i virtualbox -B2: Busca el patrón virtualbox, sin distinguir entre mayúsculas y minúsculas (-i) y extrae además las dos líneas anteriores (-B2).

Supongamos que queremos obtener la información de nombre, ip y mac de una interfaz de red. Podemos hacer lo siguiente:

ip addr | grep -i enp3s0: -A 2
2: enp3s0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 94:de:80:bc:33:c4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.155/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0

Con el comando grep -i enp3s0: -A 2, estamos obteniendo la línea que contiene el patrón de búsqueda y las dos inmediatamente posteriores.

Y si utilizamos el parámetro -C (Context), podemos obtener las n líneas inmediatamente anteriores y posteriores. Por ejemplo:

lshw -c video | grep "nvidia" -C 1
       capacidades: pm msi pciexpress vga_controller bus_master cap_list rom
       configuración: driver=nvidia latency=0
       recursos: irq:30 memoria:f2000000-f2ffffff memoria:e8000000-efffffff memoria:f0000000-f1ffffff ioport:e000(size=128) memoria:c0000-dffff
Be the first to comment

Por favor acceder para comentar.