3

私は自宅でいくつかの簡単な監視ツールを実行することに取り組んできましたが、冗談を言って、他のすべてのものと一緒にプリンターデータを取得することにしましたが、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を使い始めました。

足りないものはありますか?私は周りを見回し、メソッドを数回調整しましたが、見返りに使用可能な配列を取得したようには見えませんでした。

とにかく、あなたが私に与えることができる助け/指針に感謝します。楽しみと良い学習体験のためだけでも、これを実行できるようにしたいと思います。よろしくお願いします!私はそれを自分でもう少しそわそわしますが、時々ここをチェックします。

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 に答える