为了回答此处有关 USB 设备和发送内核补丁的问题,我需要usb-devices
命令的输出。
或者更饱满sudo cat /sys/kernel/debug/usb/devices
。
但它给出了有关所有设备的大量输出。
Vendor
如果我知道和,那么过滤掉与一个设备有关的部分的最简单方法是什么ProdID
。
部分分隔符是空行。
它应该看起来像这样
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
或者
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
而且当有多个具有相同供应商 ID 的记录时,我也希望在输出中有空行分隔符。
答案1
由于记录之间用空行分隔,因此应该可以使用awk
或perl
段落模式例如
sudo awk -vRS= '/Vendor=04b8/{print $0,"\n"}' /sys/kernel/debug/usb/devices
或(使用 GNU awk)
sudo awk -vRS= '/Vendor=04b8/{print $0,RT}' /sys/kernel/debug/usb/devices
或者使用 perl
sudo perl -00 -ne 'print if /Vendor=1d6b/' /sys/kernel/debug/usb/devices
如果您的系统有该usb-devices
实用程序,您可能能够避免cat
直接运行该文件:
usb-devices | awk '/1d6b/{print $0,RT}' RS=