如何使用 VID 和 PID 从“usb-devices”中过滤掉设备信息?

Pil*_*ot6 2 command-line bash

要在此处回答有关 USB 设备和发送内核补丁的问题,我需要输出usb-devices命令。

或者更饱满sudo cat /sys/kernel/debug/usb/devices

但它提供了关于所有设备的大量输出。

如果我知道VendorProdID.

节的分隔符是空行。

它应该是这样的

T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=1.5 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=046d ProdID=c05a Rev=63.00
S:  Manufacturer=Logitech
S:  Product=USB Optical Mouse
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
Run Code Online (Sandbox Code Playgroud)

或者

T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=04b8 ProdID=0898 Rev= 1.00
S:  Manufacturer=EPSON
S:  Product=EPSON XP-402 403 405 406 Series
S:  SerialNumber=51464B593030343135
C:* #Ifs= 3 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp
E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
Run Code Online (Sandbox Code Playgroud)

而且,当有多个具有相同供应商 ID 的记录时,我也希望在输出中使用空行分隔符。

ste*_*ver 5

由于该记录由空行分隔,它应该是可以使用awkperl段落模式

sudo awk -vRS= '/Vendor=04b8/{print $0,"\n"}' /sys/kernel/debug/usb/devices
Run Code Online (Sandbox Code Playgroud)

或(使用 GNU awk)

sudo awk -vRS= '/Vendor=04b8/{print $0,RT}' /sys/kernel/debug/usb/devices
Run Code Online (Sandbox Code Playgroud)

或者用 perl

sudo perl -00 -ne 'print if /Vendor=1d6b/' /sys/kernel/debug/usb/devices
Run Code Online (Sandbox Code Playgroud)

如果您的系统具有该usb-devices实用程序,则可以避免cat直接 ing 文件:

usb-devices | awk '/1d6b/{print $0,RT}' RS=
Run Code Online (Sandbox Code Playgroud)