0

我正在使用云环境,并且有一个命令将显示有关正在运行的 VM 的所有可用信息。这是与一个 VM 有关的一些行的示例。

RESERVATION     r-6D0F464B      170506678332    GroupD
INSTANCE        i-E9B444A9      emi-376642D8    999.99.999.999  88.888.88.888   running lock_key        0               c1.xlarge       2013-06-17T18:40:56.270Z         cluster01       eki-E7E242A3                    monitoring-disabled     999.99.999.999  88.888.88.888 ebs

我需要能够拉出i-********, emi-********, 两个 IP 地址, 它的状态, lock_key, c1.xlarge, 和监视禁用/启用。

我已经能够用一些超级简单的正则表达式来拉动整条线,但所有这些都远远超出了我的能力范围。如果有另一种更简单的方法来获取这些数据,欢迎提出任何建议。

4

2 回答 2

0

只要字段始终保持相同的顺序,您只需要在空格上拆分即可。

伪代码(嗯,它是 ruby​​,但希望你明白):

vms = {}
File.open('vm-info').readlines.each do |line|
   fields = line.split('\s+')
   field_map = {}
   vm_name = fields[<index_of_vm_name>]

   field_map['emi'] = fields[<index_of_emi>]
   field_map['ip_address'] = fields[<index_of_ip_address]
   .
   .
   .
   vms[vm_name] = field_map
end

在此之后,vms 将被初始化以包含有关每个 vm 的信息。此时您可以简单地将它们全部打印出来,或者继续对它们进行数据操作。

于 2013-08-02T15:47:15.550 回答
0

让我们分部分来。我能想到的最好的方法是将输出重定向到一个文件,在类似 unix 的环境中,你可以这样做:

cat your-command > filename.txt

其次,您需要逐行阅读文件,如果您知道其中任何一种,或者适合您的任何语言,我会使用 python 脚本或 perl 脚本。

第三,您可以通过两种不同的方式获取值:

  1. 按位置读取列,您可以使用正则表达式获取列,例如:[^\s]+
  2. 为每个特定列编写正则表达式,因此对于 IP,您可以有这样的东西:([0-9]{1,3}\.){4}用于监控monitoring-([^\s]+)等。
于 2013-08-02T15:16:19.183 回答