Comment grep deux lignes de lshw?


10

Je veux récupérer le numéro de série de la carte mère et le modèle de produit d'un ordinateur. j'ai utilisé

sudo lshw | grep -m1  serial:

pour grep le numéro de série (car il y a plusieurs occurrences de "serial:" et celle que je veux est la première. Comment puis-je le faire ET simultanément grep pour "product:" également? Il existe également plusieurs occurrences de produit, et le premier est encore celui que je veux.

lshw renvoie ceci:

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

Réponses:


16

Vous voulez que les deux premières lignes correspondent à product:ou serial:. Si oui, vous pouvez essayer:

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

Alternativement, greptoutes les lignes qui correspondent à l'une des chaînes cibles, puis à utiliser headpour imprimer uniquement les deux premiers:

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

Bien sûr, ces deux approches supposent que vous n'aurez jamais une seconde product:avant la première serial:et vice versa.


15

Utilisez lshwavec --classou -cpour afficher uniquement la systemclasse et vous n'avez pas à vous soucier d'extraire uniquement la 1ère occurrence:

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

Si vous ne voulez pas utiliser, -c systemvous pouvez utiliser sedet utiliser la q1ère occurrence de serial:

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

Si vous n'avez besoin que des valeurs que vous pouvez utiliser jq:

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

En supposant que vous exécutez ces commandes en tant que root.


Agréable! Par curiosité, comment avez-vous su utiliser system? Je ne le vois pas mentionné dans man lshw. Pouvons-nous être sûrs qu'il -c systemaffichera toujours les détails de la carte mère et rien d'autre?
terdon

1
@terdon - c'est dans le manuel: si vous exécutez lshw -short(pour voir les classes de matériel) la sortie est explicite
don_crissti

1
Ah, c'est vrai, merci. Apparemment, je n'ai lu que la première phrase de la -csection du manuel et j'ai raté la seconde qui expliquait précisément cela. Soupir .
terdon

3

Utilisation grepet -classoption:

sudo lshw -class system | grep 'product\|serial'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.