2013-09-03 2 views
1

мне нужно обработать текстовый вывод из приведенных ниже команд:Анализировать SNMP выходу в 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 = STRING: "Android"

Мне нужна выход, чтобы выглядеть

197.39.5.77="Android" 

197.39.5.77 - последние четыре цифры перед = знак.

ответ

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" 
+0

Большое спасибо за вашу помощь и поддержку. –

0

Попытка grep -Eo '(\.[0-9]{1,3}){4}\s*=.*$' | sed -r 'sed -r 's/\s*=[^:]+:/=/;s/^\.//'

Первая часть, чтобы изолировать конец линии с хорошим адресом с последующим =; вторая часть с sed стирает любую строку между = и : и стирает также первую точку перед адресом IPv4. Для компактности grep выполняет поиск 4-х кратной точки, за которой следует не более 3-х цифр.

+0

Спасибо, это работает отлично, но оно возвращает пробел, как показано ниже. 197.39.33.94 = "Android" Я могу использовать cut, чтобы удалить это пространство –

+0

Большое спасибо за вашу помощь и поддержку –

+0

@KareemHamed Или вы можете изменить первый s-command в sed, чтобы удалить дополнительное пространство; см. мое обновление. – Bentoy13

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 
+0

Спасибо, он работал с одним из выхода только 197.39.5.3 = "Android" SNMPv2-SMI :: предприятий 0.0.0.0 = 14823 Однако первоначальный результат SNMPv2-SMI :: enterprises.14823.2 .2.1.4.1.2.1.39.240.90.9.122.245.208.197.39.7.27 = STRING: «Android» SNMPv2-SMI :: предприятия.14823.2.2.1.4.1.2.1.39.240.90.9.149.138.172.197.39.7. 47 = STRING: «Android» SNMPv2-SMI :: предприятия.14823.2.2.1.4.1.2.1.39.240.231.126.16.33.84.197.39.7.32 = STRING: «Android» SNMPv2-SMI :: предприятия.14823.2. 2.1.4.1.2.1.39.240.231.126.170.135.132.197.39.7.25 = "" и другие –

+0

Конечно, я исправил это сейчас. – jxh

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.

Смежные вопросы