Bagaimana cara mendapatkan dua baris dari lshw?


10

Saya ingin mencatat nomor seri motherboard dan model produk komputer. Saya menggunakan

sudo lshw | grep -m1  serial:

untuk mendapatkan nomor seri (karena ada beberapa kemunculan "serial:" dan yang saya inginkan adalah yang pertama. Bagaimana saya bisa melakukan ini DAN secara bersamaan juga mencari "produk:"? Ada juga beberapa kemunculan produk, dan yang pertama adalah lagi yang saya inginkan.

lshw mengembalikan ini:

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

Jawaban:


16

Anda ingin dua baris pertama yang cocok dengan product:atau serial:. Jika demikian, Anda dapat mencoba:

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

Atau, grepsemua baris yang cocok dengan salah satu string target dan kemudian gunakan headuntuk hanya mencetak dua 1:

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

Tentu saja, kedua pendekatan ini mengasumsikan bahwa Anda tidak akan pernah memiliki yang kedua product:sebelum yang pertama serial:dan sebaliknya.


15

Gunakan lshwdengan --classatau -cberalih untuk hanya menampilkan systemkelas dan Anda tidak perlu khawatir tentang mengekstraksi hanya kejadian pertama:

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

Jika Anda tidak ingin menggunakan, -c systemAnda bisa menggunakan seddan cocok qpada kemunculan pertama serial:

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

Jika Anda hanya membutuhkan nilai yang dapat Anda gunakan jq:

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

Dengan asumsi Anda menjalankan perintah-perintah itu sebagai root.


Bagus! Karena penasaran, bagaimana Anda tahu menggunakannya system? Saya tidak melihatnya disebutkan dalam man lshw. Bisakah kita yakin bahwa -c systemakan selalu menampilkan detail motherboard dan tidak ada yang lain?
terdon

1
@terdon - ada di manual: jika Anda menjalankan lshw -short(untuk melihat kelas perangkat keras) hasilnya jelas
don_crissti

1
Ah, begitulah, terima kasih. Rupanya, saya hanya membaca kalimat pertama -cbagian dalam manual dan melewatkan kalimat kedua yang menjelaskan hal itu. Huh .
terdon

3

Menggunakan grepdan -classopsi:

sudo lshw -class system | grep 'product\|serial'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.