Como filtrar as informações do dispositivo de 'usb-devices' usando VID & PID?

2

Para responder a perguntas sobre dispositivos USB aqui e enviar correções de kernel, eu preciso da saída do comando usb-devices .

Ou mais completo sudo cat /sys/kernel/debug/usb/devices .

Mas isso gera muitos resultados em relação a todos os dispositivos.

Qual é a maneira mais fácil de filtrar apenas a seção referente a um dispositivo, se eu souber Vendor e ProdID .

Separadores de seções são linhas em branco.

Deverá ter esta aparência

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

ou

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

E também quando há mais de um registro com o mesmo ID de fornecedor, também gostaria de ter separadores de linha vazios na saída.

    
por Pilot6 04.06.2015 / 17:57

1 resposta

4

Como os registros são separados por linhas em branco, deve ser possível usar awk ou perl no modo de parágrafo , por exemplo

sudo awk -vRS= '/Vendor=04b8/{print $0,"\n"}' /sys/kernel/debug/usb/devices

ou (com o GNU awk)

sudo awk -vRS= '/Vendor=04b8/{print $0,RT}' /sys/kernel/debug/usb/devices

ou com perl

sudo perl -00 -ne 'print if /Vendor=1d6b/' /sys/kernel/debug/usb/devices

Se o seu sistema tiver o utilitário usb-devices , você poderá evitar cat ing o arquivo diretamente:

usb-devices | awk '/1d6b/{print $0,RT}' RS=
    
por steeldriver 04.06.2015 / 18:21