gpt4 book ai didi

regex - Linux Bash 正则表达式,从 SNMPGet 输出中检索数据

转载 作者:太空狗 更新时间:2023-10-29 11:19:30 24 4
gpt4 key购买 nike

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

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

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

最佳答案

从你的输出:

获取所有字符串:

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

获取所有整数:

grep -oP '(INTEGER|Counter32): *\K[^ ]*'
-2
-3
13630

关于regex - Linux Bash 正则表达式,从 SNMPGet 输出中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com