使用Perl中的引用点从文件的某些部分创建一个字符串

lnulla 发布于 2019-03-09 parsing 最后更新 2019-03-09 14:36 3 浏览

我正在创建一个查看snmp MIB的Perl脚本,将给定参考点的MIB部分抽出,并将结果添加到字符串中。 例如,这是我正在使用的部分数据:

      udpOutDatagrams OBJECT-TYPE
          SYNTAX  Counter
          ACCESS  read-only
          STATUS  mandatory
          DESCRIPTION
                  "The total number of UDP datagrams sent from this
                  entity."
          ::= { udp 4 }
-- the UDP Listener table
-- The UDP listener table contains information about this
      -- entity's UDP end-points on which a local application is
      -- currently accepting datagrams.
udpTable OBJECT-TYPE
          SYNTAX  SEQUENCE OF UdpEntry
          ACCESS  not-accessible
          STATUS  mandatory
          DESCRIPTION
                  "A table containing UDP listener information."
          ::= { udp 5 }
udpEntry OBJECT-TYPE
          SYNTAX  UdpEntry
          ACCESS  not-accessible
          STATUS  mandatory
          DESCRIPTION
                  "Information about a particular current UDP
                  listener."
          INDEX   { udpLocalAddress, udpLocalPort }
          ::= { udpTable 1 }
我正在寻找拉出对象名称,添加一个逗号,然后描述:
udpOutDatagrams, The total number of UDP datagrams sent from this entity.
udpTable, A table containing UDP listener information.
udpEntry, Information about a particular current UDP listener.
有一些可以使用的参考点:
  1. 所有名称后面紧跟着字符串“OBJECT-TYPE”。
  2. 所有描述都用双引号括起来,并且紧跟着一行描述“DESCRIPTION”的行
我已经编制了一个基本框架来处理这个问题。只需要一些关于将用于创建名称/描述字符串的逻辑的建议。 更新:基于思南恩努尔答案的基本脚本。它可以使用this完成。
#!/usr/local/bin/perl -w
use strict;
use SNMP;
$SNMP::save_descriptions = 1;
my $mib = $ARGV[0];
my $object;
&SNMP::addMibDirs("/usr/share/snmp/mibs/allMibs/");
&SNMP::loadModules($mib);
&SNMP::initMib();
foreach my $key ( keys %SNMP::MIB )
{    
  print "$SNMP::MIB{$key}{label}, $SNMP::MIB{$key}{description}, $SNMP::MIB{$key}{objectID}\n"
};
已邀请:

dmodi

赞同来自:

正则表达式似乎是最简单的方法。 只需解析文件,查找“OBJECT-TYPE”行,然后将“OBJECT-TYPE”之前的文本作为名称。 之后查找“DESCRIPTION”,然后查找紧跟在之后出现的引号之间的文本。 然后重复!

nnihil

赞同来自:

你考虑过使用SNMP吗?它会为您提供%SNMP::MIB hash

a tied hash to access parsed MIB information. After the MIB has been loaded this hash allows access to to the parsed in MIB meta-data(the structure of the MIB (i.e., schema)). The hash returns blessed references to SNMP::MIB::NODE objects which represent a single MIB attribute. The nodes can be fetched with multiple 'key' formats - the leaf name (e.g.,sysDescr) or fully/partially qualified name (e.g., system.sysDescr) or fully qualified numeric OID.