Lshw से दो लाइनें कैसे करें?


10

मैं मदरबोर्ड सीरियल नंबर और कंप्यूटर के उत्पाद मॉडल को पकड़ना चाहता हूं। मैंनें इस्तेमाल किया

sudo lshw | grep -m1  serial:

सीरियल नंबर को टटोलने के लिए (क्योंकि "धारावाहिक:" की कई घटनाएं हैं और मैं जो चाहता हूं वह पहले वाला है। मैं यह कैसे कर सकता हूं और साथ ही साथ "उत्पाद:" के लिए भी grep कर सकता हूं? उत्पाद की कई घटनाएं भी हैं) और पहले वाला फिर से वही है जो मैं चाहता हूं।

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केवल 1 दो प्रिंट करने के लिए उपयोग होती हैं:

$ 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तो आप 1 की घटना पर उपयोग sedऔर quit कर सकते हैं 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

3

उपयोग grepऔर -classविकल्प:

sudo lshw -class system | grep 'product\|serial'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.