Я пытаюсь использовать регулярное выражение для сопоставления с другой строкой в файле VMX, но это работает только наполовину. Я объясню.
Например, строка, которую я пытаюсь найти, равна scsi0:0.fileName = "Test01.vmdk
. Мое регулярное выражение, кажется, работает хорошо для этого. Теперь кривая, если я попытаюсь использовать то же регулярное выражение для поиска scsi0:1.fileName = "Test01_1.vmdk
. Мое регулярное выражение не находит его и отображает только первый найденный диск для каждой виртуальной машины. Я знаю, что мне чего-то не хватает, но я просто не могу это понять. Единственное, что странно, но я не думаю, что какая-то разница, это строка для второго диска scsi0:1.fileName = "Test01_1.vmdk
расположена внизу файла, а строка для scsi0:0.fileName = "Test01.vmdk
находится в середине файла с большим количеством строк. для другого варианта после него. Это регулярное выражение останавливается слишком рано? Это вообще возможно?
В любом случае, вот блок кода, над которым я работаю.
foreach my $vm (@virtual_machines) {
my $vmx_file = $ssh1->capture("cat $virtual_machines{$vm}{VMX}");
my $inc = -1;
if ($vmx_file =~ m/scsi([0-3]):([0-9]|1[0-5])\.fileName\s+=\s+"(?<DISK>\w+?\.vmdk)"/xm) {
++$inc;
$virtual_disks{$vm}{"Disk$inc"} = "$+{DISK}";
}
Это странно, но если я явно включу номера идентификатора SCSI, я ищу его работу. По какой-то причине он не может найти его самостоятельно. Я тоже обновил свой пример.