我想 grep 计算机的主板序列号和产品型号。我用了
sudo lshw | grep -m1 serial:
grep 序列号(因为“serial:”多次出现,而我想要的是第一个。我怎样才能做到这一点并同时grep“product:”?还有多次出现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
答案1
您希望前两行匹配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:
,反之亦然。
答案2
lshw
与--class
或开关一起使用-c
以仅显示system
类,您无需担心仅提取第一次出现的情况:
lshw -c system | grep -E 'product:|serial:'
如果您不想使用,-c system
可以在第一次出现时使用sed
和uit :q
serial
lshw | sed '/serial/q;/product/!d'
如果您只需要可以使用的值jq
:
lshw -json -c system | jq '.product,.serial'
假设您以 root 身份运行这些命令。
答案3
使用grep
及-class
选项:
sudo lshw -class system | grep 'product\|serial'