如何通过Bash提取STMicroelectronics打印机的USB关键信息
提取STMicroelectronics打印机USB关键参数的Bash实现
前提说明
已知目标打印机的USB设备ID为0483:5743,可通过lsusb -vvv -d 0483:5743获取其详细USB描述信息,以下是用Bash工具提取指定参数的方法:
方法1:grep+awk一次性提取并格式化输出
lsusb -vvv -d 0483:5743 | grep -E 'idVendor|idProduct|bEndpointAddress' | awk ' /idVendor/ {printf "idVendor: %s\n", $2} /idProduct/ {printf "idProduct: %s\n", $2} /bEndpointAddress/ { if ($2 ~ /^0x0[0-9A-Fa-f]$/) printf "endpointOUT: %s\n", $2 if ($2 ~ /^0x8[0-9A-Fa-f]$/) printf "endpointIN: %s\n", $2 }'
命令解释:
lsusb -vvv -d 0483:5743:输出目标设备的全量USB描述grep -E:过滤出包含idVendor、idProduct、bEndpointAddress(端点地址字段)的行awk:按字段匹配处理输出:- 直接提取
idVendor和idProduct的值 - 端点地址规则:OUT端点以
0x0开头(最高位为0),IN端点以0x8开头(最高位为1),匹配对应模式后输出
- 直接提取
方法2:grep单独提取每个参数(灵活按需调用)
使用Perl正则(-P参数)和\K忽略前缀,直接提取目标值:
# 提取idVendor lsusb -vvv -d 0483:5743 | grep -oP 'idVendor\s+\K0x[0-9A-Fa-f]{4}' # 提取idProduct lsusb -vvv -d 0483:5743 | grep -oP 'idProduct\s+\K0x[0-9A-Fa-f]{4}' # 提取endpointOUT lsusb -vvv -d 0483:5743 | grep -oP 'bEndpointAddress\s+\K0x0[0-9A-Fa-f]' # 提取endpointIN lsusb -vvv -d 0483:5743 | grep -oP 'bEndpointAddress\s+\K0x8[0-9A-Fa-f]'
命令解释:
-o:只输出匹配的目标内容,而非整行-P:启用Perl兼容正则,支持\K语法(忽略\K之前的匹配内容)- 正则规则:精准匹配参数名后的十六进制值格式
方法3:结构化结果输出
如果需要更清晰的展示格式,可使用组合命令:
echo "=== STMicroelectronics Printer USB Info ===" printf "idVendor: %s\n" "$(lsusb -vvv -d 0483:5743 | grep -oP 'idVendor\s+\K0x[0-9A-Fa-f]{4}')" printf "idProduct: %s\n" "$(lsusb -vvv -d 0483:5743 | grep -oP 'idProduct\s+\K0x[0-9A-Fa-f]{4}')" printf "endpointOUT: %s\n" "$(lsusb -vvv -d 0483:5743 | grep -oP 'bEndpointAddress\s+\K0x0[0-9A-Fa-f]')" printf "endpointIN: %s\n" "$(lsusb -vvv -d 0483:5743 | grep -oP 'bEndpointAddress\s+\K0x8[0-9A-Fa-f]')"
内容的提问来源于stack exchange,提问作者DatabaseMan
相关产品推荐
相关产品推荐

