我在從Ubuntu 12.04框的Perl腳本中的某個變量中抽取某些值時遇到了一些問題。在Perl中創建正則表達式以提取值
我看了看這個頁面:How to extract string following a pattern
這是那種我想要做的。我需要在特定模式之後提取字符串值。 這裏是我迄今爲止代碼:
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};
}
它會收益的模型串得很好,但它不會返回的SerialNo字符串。代碼不一定要用grep;我剛剛修改了上面鏈接的代碼。並看到我是如何可怕的與正則表達式,我可能會失去一些基本的東西在這裏。
順便說一下,這段代碼的目的是查看/ dev文件夾來查找任何磁盤驅動器,如果它確實存在,將其設置爲一個數組,然後上述腳本將獲取它的Model#和Serial#。 此外,如果有人看到更好的方式來做我正在做的事情,我非常樂於接受建議。我對Perl仍然很陌生(到目前爲止只有一個星期左右)。
也許你應該表現出你的輸入和預期輸出代替。這就像詢問如何找到從紐約到波士頓的路線,並詢問如何駕駛汽車的方向之間的區別。 – TLP
@TLP對不起,我是新來的論壇,儘管我是新來的Perl。我的輸入將是數組sds中的一個元素,在這種情況下,它將是'/ dev/sda'。輸出應該是該驅動器的型號和序列號,在這種情況下應該是'ST380011A'和'5JVJ2BBA'。但是,序列號不會回來,我猜這是因爲之後的分隔符。只是一個猜測。 – Arkevius