因此,我们的警报平台生成基于 SNMP MIB 的专有代码。如果您不熟悉 SNMP,请不要担心,这个问题只是切线相关的。代码最终看起来像这样:
case ".1.3.6.1.4.1.5555": ## This is the OID for that specific device type, this switch/case began in the main file.
switch ($specific-trap): {
case "10": ## The specific alarm
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
case "11": ## A different alarm
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
case "12": ## A different alarm
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
case "20": ## clears specific-trap 10
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
case "21": ## clears 11
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
case "22": ## clears 12
# Alarm-specific code
@Identifier = $enterprise + "." + $specific-trap
default:
## what happens if the alarm isn't found
}
我需要做的是使用警报并清除作为@Identifier(唯一键),因此它们会相互覆盖。因此,例如,第一种情况应如下所示:
case "10": ## The specific alarm
# Alarm-specific code
@Identifier = $enterprise + ".10-20"
并且“20”的情况将被设置为相同。
我通常只是浏览文件并手动编辑这些,但如果有数百个陷阱,这可能会变得乏味。我是否错过了一些可以做到这一点的简单 VI 技巧?我想到的一切都行不通,因为 $specific-trap 值已经与 @Identifier 不在同一行。
我考虑过只写一个 Perl 脚本来处理它,但我很懒。我认为可能有一些 VI 魔法可以轻松做到这一点。