Як схопити два рядки з lshw?


10

Я хочу присвоїти серійний номер материнської плати та модель продукту комп'ютера. я використав

sudo lshw | grep -m1  serial:

перемацати серійний номер (оскільки є кілька випадків "serial:", і те, що я хочу, є першим. Як я можу це зробити І одночасно grep для "product:" також? Існує також кілька випадків появи продукту, а перша - знову та, яку я хочу.

lshw повертає це:

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

Відповіді:


16

Ви хочете, щоб перші два рядки відповідали product:або serial:. Якщо так, ви можете спробувати:

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

Крім того, grepвсі рядки, які відповідають будь-якому з цільових рядків, а потім використовують headлише для друку перших двох:

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

Звичайно, обидва ці підходи припускають, що ніколи не будеш секунди product:перед першим serial:і навпаки.


15

Використовуйте lshwза допомогою --classабо -cперемикач, щоб показати лише systemклас, і вам не потрібно буде турбуватися про вилучення лише першого явища:

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

Якщо ви не хочете використовувати, -c systemви можете скористатися sedта quit під час першого появи serial:

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

Якщо вам потрібні лише ті значення, які ви можете використовувати jq:

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

Якщо припустити, що ви виконуєте ці команди як root.


Приємно! З цікавості, як ви вміли користуватися system? Я не бачу, щоб це було згадано в man lshw. Чи можемо ми бути впевнені, що -c systemзавжди будуть відображатися деталі материнської плати та нічого іншого?
тердон

1
@terdon - це в посібнику: якщо ви запустите lshw -short(побачити апаратні класи), висновок не пояснюється
don_crissti

1
Так, спасибі. Мабуть, я прочитав лише перше речення -cрозділу в посібнику і пропустив друге, яке саме це пояснило. Зітхнути .
тердон

3

Використання grepта -classпараметр:

sudo lshw -class system | grep 'product\|serial'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.