我一直在努力让一些简单的监控工具在家里运行,并决定搞笑并检索打印机数据以及其他所有内容,但是现在我已经将SNMP部分工作得很好了,我似乎无法解析我的SNMPGET命令在Linux中正确检索的数据,我使用的当前脚本如下:
#!/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 ,而这会返回SOMETHING,它是原始字符串中的所有内容除以空格,从第一个引号开始。
有什么我想念的吗?我环顾四周,调整了几次方法,但似乎从来没有得到过可用的数组。
无论如何,我感谢你能给我的任何帮助/指示。我希望能够实现这一目标,即使只是为了娱乐和良好的学习体验。提前谢谢你!我自己会更喜欢它,但不时会在这里查看。
答案 0 :(得分:1)
从你的输出:
获取所有字符串:
grep -oP 'STRING: *"\K[^"]*'
Black Toner Cartridge
Drum Unit
SLAAP
获取所有整数:
grep -oP '(INTEGER|Counter32): *\K[^ ]*'
-2
-3
13630
答案 1 :(得分:0)
使用awk
,您可以执行此操作:
awk 'NR%2==0' RS=\" <<< $Input
Black Toner Cartridge
Drum Unit
SLAAP
或变成
Output1=$(awk 'NR%2==0' RS=\" <<< $Input)