Come grep due linee da lshw?


10

Voglio grep il numero di serie della scheda madre e il modello del prodotto di un computer. ero solito

sudo lshw | grep -m1  serial:

per grep il numero seriale (poiché ci sono più occorrenze di "serial:" e quello che voglio è il primo. Come posso fare questo e contemporaneamente grep anche per "product:"? Ci sono anche più ricorrenze di prodotto, e il primo è di nuovo quello che voglio.

lshw restituisce questo:

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

Risposte:


16

Vuoi le prime due righe che corrispondono a product:o serial:. In tal caso, puoi provare:

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

In alternativa, greptutte le righe che corrispondono a una delle stringhe di destinazione e quindi utilizzano headper stampare solo le prime due:

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

Naturalmente, entrambi questi approcci presuppongono che non avrai mai un secondo product:prima del primo serial:e viceversa.


15

Utilizzare lshwcon l' opzione --classo -cper mostrare solo la systemclasse e non è necessario preoccuparsi di estrarre solo la prima occorrenza:

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

Se non si desidera utilizzare -c systemè possibile utilizzare sede utilizzare qalla prima occorrenza di serial:

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

Se hai bisogno solo dei valori che puoi usare jq:

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

Supponendo che tu stia eseguendo quei comandi come root.


Bello! Per curiosità, come hai saputo usare system? Non lo vedo menzionato in man lshw. Possiamo essere sicuri che -c systemmostrerà sempre i dettagli della scheda madre e nient'altro?
terdon

1
@terdon - è nel manuale: se si esegue lshw -short(per vedere le classi hardware) l'output è autoesplicativo
don_crissti

1
Ah, lo è, grazie. Apparentemente, ho letto solo la prima frase della -csezione del manuale e ho perso la seconda che lo spiegava precisamente. Sigh .
terdon

3

Utilizzo grepe -classopzione:

sudo lshw -class system | grep 'product\|serial'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.