Wie grep ich zwei Zeilen von lshw?


10

Ich möchte die Seriennummer des Motherboards und das Produktmodell eines Computers ermitteln. ich benutzte

sudo lshw | grep -m1  serial:

um die Seriennummer zu erfassen (da es mehrere Vorkommen von "serial:" gibt und das von mir gewünschte das erste ist. Wie kann ich dies tun UND gleichzeitig auch nach "product:" suchen? Es gibt auch mehrere Vorkommen von Produkt, und der erste ist wieder der, den ich will.

lshw gibt dies zurück:

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

Antworten:


16

Sie möchten die ersten beiden Zeilen, die entweder product:oder übereinstimmen serial:. Wenn ja, können Sie versuchen:

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

Alternativ können grepalle Zeilen, die mit einer der Zielzeichenfolgen übereinstimmen und dann headnur die ersten beiden drucken:

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

Bei beiden Ansätzen wird natürlich davon ausgegangen, dass Sie nie eine Sekunde product:vor dem ersten haben serial:und umgekehrt.


15

Verwenden Sie lshwdie Option --classoder -c, um nur die systemKlasse anzuzeigen, und Sie müssen sich nicht darum kümmern, nur das erste Vorkommen zu extrahieren:

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

Wenn Sie nicht verwenden möchten, können -c systemSie verwenden sedund quit beim ersten Auftreten von serial:

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

Wenn Sie nur die Werte benötigen, die Sie verwenden können jq:

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

Angenommen, Sie führen diese Befehle als root aus.


Nett! Woher wussten Sie aus Neugier, was Sie verwenden sollten system? Ich sehe es nicht erwähnt in man lshw. Können wir sicher sein, dass -c systemimmer die Motherboard-Details angezeigt werden und sonst nichts?
Terdon

1
@terdon - es ist im Handbuch: Wenn Sie ausführen lshw -short(um die Hardware-Klassen zu sehen), ist die Ausgabe selbsterklärend
don_crissti

1
Ah, so ist es, danke. Anscheinend habe ich nur den ersten Satz des -cAbschnitts im Handbuch gelesen und den zweiten verpasst, der genau das erklärte. Seufz .
Terdon

3

Verwendung grepund -classOption:

sudo lshw -class system | grep 'product\|serial'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.