¿Cómo grep dos líneas de lshw?

10

Quiero obtener el número de serie de la placa base y el modelo de producto de una computadora. solía

sudo lshw | grep -m1  serial:

para grep el número de serie (ya que hay múltiples ocurrencias de "serial:" y el que quiero es el primero. ¿Cómo puedo hacer esto Y simultáneamente grep para "product:"? También hay múltiples ocurrencias de producto, y el primero es de nuevo el que quiero.

lshw devuelve esto:

user@ubuntu:~$ sudo lshw
ubuntu-pc              
    description: Notebook
    product: 23252DG (LENOVO_MT_2325)
    vendor: LENOVO
    version: ThinkPad X230
    serial: R9TWZVR
    width: 64 bits
    capabilities: smbios-2.7 dmi-2.7 vsyscall32
    configuration: administrator_password=disabled chassis=notebook family=ThinkPad X230 power-on_password=disabled sku=LENOVO_MT_2325 uuid=01ECC0B1-8251-CB11-8538-B7D9EC435D9B
  *-core
       description: Motherboard
       product: 23252DG
       vendor: LENOVO
       physical id: 0
       version: Not Defined
       serial: 1ZPAB2AC2C1
       slot: Not Available
     *-cpu
          description: CPU
          product: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          version: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
          serial: None
shortyputting
fuente

Respuestas:

16

Desea las dos primeras líneas que coinciden con product:o serial:. Si es así, puedes probar:

$ sudo lshw | grep -Em2 'serial:|product:'
    product: 20FWCTO1WW (LENOVO_MT_20FW_BU_Think_FM_ThinkPad T460p)
    serial: PF0P1EUH

Alternativamente, greptodas las líneas que coinciden con cualquiera de las cadenas de destino y luego se utilizan headpara imprimir solo las dos primeras:

$ sudo lshw | grep -E 'serial:|product:' | head -n2
    product: 20FWCTO1WW (LENOVO_MT_20FW_BU_Think_FM_ThinkPad T460p)
    serial: PF0P1EUH

Por supuesto, ambos enfoques suponen que nunca tendrá un segundo product:antes del primero serial:y viceversa.

terdon
fuente
15

Use lshwcon el interruptor --classo -cpara mostrar solo la systemclase y no necesita preocuparse por extraer solo la primera aparición:

lshw -c system | grep -E 'product:|serial:'

Si no desea usar -c system, puede usar sedy quit en la primera aparición de serial:

lshw | sed '/serial/q;/product/!d'

Si solo necesita los valores que podría usar jq:

lshw -json -c system | jq '.product,.serial'

Asumiendo que está ejecutando esos comandos como root.

don_crissti
fuente
¡Agradable! Por curiosidad, ¿cómo sabías usar system? No lo veo mencionado en man lshw. ¿Podemos estar seguros de que -c systemsiempre se mostrarán los detalles de la placa base y nada más?
terdon
1
@terdon - está en el manual: si ejecuta lshw -short(para ver las clases de hardware) el resultado se explica por sí mismo
don_crissti
1
Ah, así es, gracias. Aparentemente, solo leí la primera oración de la -csección en el manual y me perdí la segunda que explicaba precisamente eso. Suspiro .
terdon
3

Uso grepy -classopción:

sudo lshw -class system | grep 'product\|serial'
GAD3R
fuente