将wmic命令的输出读入单个数组并在Perl中处理该数组

时间:2013-02-22 09:53:40

标签: windows perl

我的要求如下:

我正在读取wmic命令的输出,如下所示:

my @pnames = `wmic product where "Name like '%Provider%'" get IdentifyingNumber, Name,Version`;

print "@pnames";

到此为止输出如下:

IdentifyingNumber                        Name                                     Version

{E094B8EA-87B7-48DE-A0A8-A18AC8BFCDF4} .NET Data Provider for Teradata 14.00.0.0  14.00.0.0

{1551F9D6-1B14-4AE1-BABA-70A4319C236A}  ODBC Driver Provider                       14.00.0.0

处理数组

foreach $name ( @pnames )
{
  chomp($name);

  #@names = split('need to pass something',$name); 
  # I want to split every input entry   into 3 parts- IdentifyingNumber, Name,Version similarly the way they read.

  $name =~ s/^\s+//; #remove leading spaces
  $name =~ s/\s+$//; #remove trailing spaces

  # here logic goes this way, If the version number has matched, search for name and if name has matched display its identifying number 

  print "Identifying number(say $id) of the packge with name(say $pkg)\n";
}

1 个答案:

答案 0 :(得分:0)

您可以通过匹配输入行

进行拆分
foreach my $line (@pnames) {
    my($id, $name, $version) = ($line =~ m/^\s*({.+?})\s+(.+?)\s+([\d.]+)\s*$/);
    ...
}

这会捕获(...)这三个部分,并将它们分配给变量$id$name$version