3

我一直在努力让一些简单的监控工具在家里运行,并决定变得有趣并检索打印机数据以及其他所有内容,但是现在我的 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,但它是原始字符串中的所有内容除以空格,从第一个引号开始。

有什么我想念的吗?我环顾四周,调整了几次我的方法,但似乎从来没有得到一个可用的数组作为回报。

无论如何,我很感激你能给我的任何帮助/指点。我希望能够运行它,即使只是为了好玩和良好的学习体验。不过提前谢谢你!我自己会更烦躁,但会不时检查这里。

4

2 回答 2

1

从您的输出:

获取所有字符串:

grep -oP 'STRING: *"\K[^"]*'
Black Toner Cartridge
Drum Unit
SLAAP 

获取所有整数:

grep -oP '(INTEGER|Counter32): *\K[^ ]*'
-2
-3
13630
于 2013-10-03T10:00:39.130 回答
0

awk可以这样做:

awk 'NR%2==0' RS=\" <<< $Input
Black Toner Cartridge
Drum Unit
SLAAP

或者变成一个变量

Output1=$(awk 'NR%2==0' RS=\" <<< $Input)
于 2013-10-03T10:20:52.117 回答