วิธีการ grep สองบรรทัดจาก lshw?


10

ฉันต้องการหมายเลขซีเรียลของเมนบอร์ดและรุ่นผลิตภัณฑ์ของคอมพิวเตอร์ ฉันใช้

sudo lshw | grep -m1  serial:

เพื่อ grep หมายเลขซีเรียล (เนื่องจากมีหลายเหตุการณ์ที่เกิดขึ้นของ "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คลาสและคุณไม่ต้องกังวลเกี่ยวกับการแยกเฉพาะเหตุการณ์ที่ 1:

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

หากคุณไม่ต้องการใช้-c systemคุณสามารถใช้sedและquit ในวันที่ 1 serial:

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

หากคุณต้องการเฉพาะค่าที่คุณสามารถใช้jq:

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

สมมติว่าคุณกำลังเรียกใช้คำสั่งเหล่านั้นเป็นรูต


ดี! จากความอยากรู้คุณรู้จักใช้systemอย่างไร man lshwผมไม่เห็นว่ามันจะกล่าวถึงใน เรามั่นใจได้หรือไม่ว่า-c systemจะแสดงรายละเอียดเมนบอร์ดเสมอและไม่มีอะไรอีก?
terdon

1
@terdon - อยู่ในคู่มือ: ถ้าคุณเรียกใช้lshw -short(เพื่อดูคลาสฮาร์ดแวร์) ผลลัพธ์จะอธิบายตนเอง
don_crissti

1
อามันเป็นเช่นนั้นขอบคุณ เห็นได้ชัดว่าฉันอ่านเฉพาะประโยคแรกของ-cส่วนในคู่มือและพลาดประโยคที่สองซึ่งอธิบายอย่างแม่นยำว่า ถอนหายใจ
terdon

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.