我在 Ubuntu 12.04 机器上从我的 Perl 脚本中的变量中提取某些值时遇到了一些麻烦。
我查看了这个页面:如何按照模式提取字符串
这就是我想做的。我需要在某种模式之后提取一个字符串值。这是我到目前为止的代码:
foreach $HDD (@sds)
{
$hdStat = `hdparm -i $HDD | grep -Po 'Model=\K.*?(?=,)'`;
$sdModel{$HDD} = $hdStat;
$hdStat = `hdparm -i $HDD | grep -Po 'SerialNo=\K.*?(?=")'`;
$sdSerial{$HDD} = $hdStat;
}
foreach $HDD (keys %sdModel)
{
print $sdModel{$HDD};
}
foreach $HDD (keys, %sdSerial)
{
print $sdSerial{$HDD};
}
它会很好地返回 Model 字符串,但不会返回 SerialNo 字符串。代码不必与 grep 一起使用;我刚刚修改了上面链接中的代码。看到我对正则表达式有多糟糕,我可能在这里遗漏了一些基本的东西。
顺便说一句,此代码的目的是查看 /dev 文件夹以查找任何磁盘驱动器,如果找到,则将其设置为一个数组,然后上面的脚本将在其中获取它的型号 # 和序列号。此外,如果有人看到更好的方法来做我正在做的事情,我非常愿意接受建议。我对 Perl 还是很陌生(到目前为止只使用了大约一周)。