如何从lshw grep 两行?

sho*_*ing 10 grep text-processing

我想grep主板序列号和电脑的产品型号。我用了

sudo lshw | grep -m1  serial:
Run Code Online (Sandbox Code Playgroud)

grep 序列号(因为有多次出现“serial:”,我想要的是第一个。我怎样才能做到这一点并同时对“product:”进行 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
Run Code Online (Sandbox Code Playgroud)

ter*_*don 16

您希望前两行与product:或匹配serial:。如果是这样,您可以尝试:

$ sudo lshw | grep -Em2 'serial:|product:'
    product: 20FWCTO1WW (LENOVO_MT_20FW_BU_Think_FM_ThinkPad T460p)
    serial: PF0P1EUH
Run Code Online (Sandbox Code Playgroud)

或者,grep匹配任一目标字符串的所有行然后head仅用于打印第一个两个:

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

当然,这两种方法都假设product:在第一个之前你永远不会有第二个,serial:反之亦然。


don*_*sti 15

lshw--classor-c开关一起使用以仅显示system类,您无需担心仅提取第一次出现:

lshw -c system | grep -E 'product:|serial:'
Run Code Online (Sandbox Code Playgroud)

如果您不想使用,-c system您可以在第一次出现时使用sedquit serial

lshw | sed '/serial/q;/product/!d'
Run Code Online (Sandbox Code Playgroud)

如果您只需要可以使用的值jq

lshw -json -c system | jq '.product,.serial'
Run Code Online (Sandbox Code Playgroud)

假设您以 root 身份运行这些命令。