Назад | Перейти на главную страницу

Как я могу заставить snmpwalk выводить новые строки из вывода?

Я проверил документацию, но ничего не вижу - кто-нибудь знает, можно ли избежать символов новой строки, возвращаемых некоторыми OID?

Мне нужно проанализировать вывод в скрипте, и это вызывает у меня головные боли.

Например:

$ snmpwalk -v2c -c public -Oq 10.0.0.1 1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 Cisco Internetwork Operating System Software
IOS (tm) Catalyst 4000 L3 Switch Software (cat4000-I5S-M), Version 12.2(18)EW4, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2005 by cisco Systems, Inc.
Com
SNMPv2-MIB::sysObjectID.0 SNMPv2-SMI::enterprises.9.1.502
DISMAN-EVENT-MIB::sysUpTimeInstance 122:19:10:46.16
SNMPv2-MIB::sysContact.0 012345
SNMPv2-MIB::sysName.0 name
SNMPv2-MIB::sysLocation.0 London,uk,emea

В моем коде я могу проанализировать каждую строку вывода и разделить ее на первое пространство, что работает до тех пор, пока я не получу многострочный ответ, такой как sysDescr OID выше. Было бы замечательно, если бы в ответе был какой-то способ напечатать \ n вместо настоящей новой строки.

Вы можете попробовать передать свой вывод через это sed сценарий:

$ snmpwalk ... | sed -n '/MIB::/!{H;$g};/MIB::/{$!x;s/\n/\\n/g;ta;${x;/^$/!p;x};:a;/^$/!p}'
SNMPv2-MIB::sysDescr.0 Cisco Internetwork Operating System Software\nIOS (tm) Catalyst 4000 L3 Switch Software (cat4000-I5S-M), Version 12.2(18)EW4, RELEASE SOFTWARE (fc1)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2005 by cisco Systems, Inc.\nCom
SNMPv2-MIB::sysObjectID.0 SNMPv2-SMI::enterprises.9.1.502
DISMAN-EVENT-MIB::sysUpTimeInstance 122:19:10:46.16
SNMPv2-MIB::sysContact.0 012345\nfoo\nbar
SNMPv2-MIB::sysName.0 name
SNMPv2-MIB::sysLocation.0 London,uk,emea

Вот версия AWK, которая более читабельна, но немного длиннее:

$ snmpwalk ... | awk 'function printit() {printf prev; if (accum) printf "\\n" accum; print ""} !/MIB::/{accum=accum "\\n" $0} /MIB::/{if (NR>1) {printit()}; accum=""; prev=$0} END{printit()}'
  • Пытаться: snmpwalk --hexOutputLength = 1024 .....
  • Или отключите разрывы строк: snmpwalk --hexOutputLength = 0 .....

Ссылка:
https://it.sourceforge.net/p/net-snmp/mailman/message/16868020/
http://net-snmp.sourceforge.net/docs/man/snmp.conf.html