Làm thế nào để grep hai dòng từ lshw?


10

Tôi muốn grep số sê-ri bo mạch chủ và mô hình sản phẩm của máy tính. Tôi đã sử dụng

sudo lshw | grep -m1  serial:

để grep số sê-ri (vì có nhiều lần xuất hiện của "nối tiếp:" và lần xuất hiện tôi muốn là lần đầu tiên. Làm cách nào tôi có thể thực hiện điều này VÀ đồng thời grep cho "sản phẩm:"? Cũng có nhiều lần xuất hiện sản phẩm, và cái đầu tiên lại là thứ tôi muốn.

lshw trả lại cái này

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

Câu trả lời:


16

Bạn muốn hai dòng đầu tiên khớp với product:hoặc serial:. Nếu vậy, bạn có thể thử:

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

Ngoài ra, greptất cả các dòng khớp với một trong hai chuỗi đích và sau đó sử dụng headđể chỉ in hai số 1:

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

Tất nhiên, cả hai cách tiếp cận này đều cho rằng bạn sẽ không bao giờ có lần thứ hai product:trước lần đầu tiên serial:và ngược lại.


15

Sử dụng lshwvới --classhoặc -cchuyển đổi để chỉ hiển thị systemlớp và bạn không cần phải lo lắng về việc chỉ trích xuất lần thứ nhất:

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

Nếu bạn không muốn sử dụng, -c systembạn có thể sử dụng sedquit vào lần xuất hiện đầu tiên của serial:

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

Nếu bạn chỉ cần các giá trị bạn có thể sử dụng jq:

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

Giả sử bạn đang chạy các lệnh đó với quyền root.


Đẹp! Vì tò mò, làm thế nào bạn biết sử dụng system? Tôi không thấy nó được đề cập trong man lshw. Chúng ta có thể tự tin rằng -c systemsẽ luôn hiển thị các chi tiết bo mạch chủ và không có gì khác không?
terdon

1
@terdon - trong hướng dẫn sử dụng: nếu bạn chạy lshw -short(để xem các lớp phần cứng), đầu ra sẽ tự giải thích
don_crissti

1
À, vậy là được, cảm ơn. Rõ ràng, tôi chỉ đọc câu đầu tiên của -cphần trong hướng dẫn và bỏ lỡ câu thứ hai giải thích chính xác điều đó. Thở dài .
terdon

3

Sử dụng grep-classtùy chọn:

sudo lshw -class system | grep 'product\|serial'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.