1

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

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 = STRING: "Android"

我需要输出看起来像

197.39.5.77="Android"

197.39.5.77=是符号前的最后四位数字。

4

4 回答 4

2

如果前缀是完全静态的,只需将其删除。

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}构造是 Bashisms。

于 2013-09-03T08:30:51.567 回答
1

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适当的:

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
于 2013-09-03T08:15:25.130 回答
0

管道通过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"
于 2013-09-03T07:47:33.443 回答
0

尝试grep -Eo '(\.[0-9]{1,3}){4}\s*=.*$' | sed -r 'sed -r 's/\s*=[^:]+:/=/;s/^\.//'

第一部分是用一个好的地址隔离行尾,然后是=; 第二部分删除和sed之间的任何字符串,并删除 IPv4 地址之前的第一个点。为了紧凑,搜索 4 次点后跟最多 3 位数字。=:grep

于 2013-09-03T07:51:26.017 回答