Linux 在Bash中解析SNMP输出

Linux 在Bash中解析SNMP输出,linux,bash,Linux,Bash,我需要处理以下命令的文本输出: snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39 原始输出为: SNMPv2 SMI::enterprises.14823.2.2.1.4.1.2.1.39.252.200.151.233.54.69.197.39.5.77=字符串:“Android” 我需要输出看起来像 197.39.5.77="Android" 197.39.5.77是=符号前的最后四

我需要处理以下命令的文本输出:

snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39
原始输出为:

SNMPv2 SMI::enterprises.14823.2.2.1.4.1.2.1.39.252.200.151.233.54.69.197.39.5.77=字符串:“Android”

我需要输出看起来像

197.39.5.77="Android"

197.39.5.77
=
符号前的最后四位。

管道通过
sed
,如下所示:

$ snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39 | sed -r 's/.*\.([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) = .*: (.*)/\1=\2/g'
197.39.5.77="Android"
请尝试
grep-Eo'(\.[0-9]{1,3}){4}\s*=.*$'| sed-r'sed-r's/\s*=[^:::+://;s/^\./'

第一部分是用一个好的地址(后跟
=
)隔离行的末尾;带有
sed
的第二部分删除
=
之间的任何字符串,并删除IPv4地址前的第一个点。对于紧凑性,
grep
正在搜索一个点的4倍,后跟最多3位数字。

使用
sed

snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39 \
| sed -e 's/.*\.\([0-9]\+\(\.[0-9]\+\)\{3\}\).*\(".*"\)/\1=\3/'
或者使用
bash
property:

snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39 \
| while read a b c; do echo ${a#${a%*.*.*.*.*}.}=\"${c#*\"}; done

如果前缀是完全静态的,只需删除它

result=$(snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39)
result=${result#'SNMPv2-SMI::enterprises.14823.2.2.1.4.1.2.1.39.252.200.151.233.54.69.'}
echo "${result/ = STRING: /}"
或者你也可以

oldIFS=$IFS
IFS=' .'
set $($(snmpwalk -v2c -c community 192.168.122.15 .1.3.6.1.4.1.14823.2.2.1.4.1.2.1.39)
IFS=$oldIFS
shift 16
result="$1.$2.$3.$4=$7"

shift
的数值参数和
${var/str/subst}
构造都是bashism.

谢谢,它只处理了其中一个输出197.39.5.3=“Android”SNMPv2 SMI::enterprises 0.0.0.0=14823,但原始结果是SNMPv2 SMI::enterprises.14823.2.2.1.4.1.2.1.39.240.90.122.245.208.197.7.27=STRING:“Android”SNMPv2 SMI::enterprises.14823.2.2.1.4.1.2.1.39.240.90.9.149.138.172.197.39.7.47=字符串:“安卓”SNMPv2 SMI::enterprises.14823.2.1.4.1.2.1.1.1.39.240.231.126.16.33.84.197.39.32=字符串:“安卓”SNMPv2 SMI::enterprises.14823.2.2.1.1.1.2.1.1.39.240.231.126.170.135.132.197.39=”我现在修复了它,谢谢你了,这是完美的工作,但它返回的空间如下197.39.33.94=“Android”我可以使用剪切删除此空间非常感谢您的帮助和支持support@KareemHamed或者,您可以修改sed中的第一个s命令以删除多余的空间;看我的最新消息。非常感谢你的帮助和支持。