我已经检查了文档,但看不到任何东西 – 有谁知道是否有可能逃脱从一些OID返回的换行符?
我需要在脚本中parsing输出,这使我头痛。
例如:
$ 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
在我的代码中,我可以parsing输出的每一行,并将其分割到第一个工作空间,直到获得像上面的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()}'