我一直在家里尝试运行一些简单的监控工具,决定获取打印机数据以及其他所有内容,但是现在我已经成功地使用SNMP部分,但我似乎无法在Linux中正确解析我的SNMPGET命令检索的数据。我目前使用的脚本如下:
#!/usr/bin/env bash
# RegEx for Strings: "(.+?)"| -?\d+
RegExStr='"(.+?)"| -?\d+'
# ***
# Brother HL-2150N Printer
# ***
# Order Data: Toner Naame, Toner Level, Drum Name, Drum Status, Total Pages Printer, Display Status
Input=$(snmpget -v 1 -c public 192.168.16.112 SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 SNMPv2-SMI::mib- 2.43.11.1.1.9.1.1 SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 -m BROTHER-MIB)
Output1=( $(echo $Input | egrep -o $RegExStr) )
# Output
echo $Input
echo ${Output1[@]}
有趣的是,这并不起作用。我相当确定我的正则表达式("(.+?)")是正确的,因为我已经在各种不同的语法检查器和测试器中多次进行了测试。它应该选择所有位于引号("")之间的数据。
无论如何,SNMPGET返回的结果是:
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Black Toner Cartridge" SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 = INTEGER: -2 SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: "Drum Unit" SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: -3 SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 = Counter32: 13630 SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "SLAAP "
我已经尝试了各种方法,使用grep返回一个空字符串。据我所知,grep本身并不支持每个正则表达式命令,所以我开始使用egrep,虽然它返回了一些内容,但它是原始字符串内所有由空格分开的内容,从第一个引号开始。
我错过了什么吗?我已经看过周围,并调整了我的方法几次,但似乎从未得到可用的数组返回。
总之,我很感激你能给我任何帮助/指针。即使只是为了好玩和良好的学习体验,我也希望能让这个运行起来。无论如何,在此提前感谢您!我会继续摆弄它,但偶尔会在这里检查情况。
"([^"]+)
吗? - JonM