Я двигался с выражением регулярного выражения, и я наткнулся на блокпост, который, кажется, не могу обойти. Я пытаюсь избавиться от "(" в середине строки текста с помощью регулярных выражений, их было 2, но я разобрался, как получить один в конце строки. Это тот, что в середине, который я могу взломать .
Вот более полный фрагмент файла, который я ищу.
ide1:0.present = "TRUE"
ide1:0.clientDevice = "TRUE"
ide1:0.deviceType = "cdrom-raw"
ide1:0.startConnected = "FALSE"
floppy0.startConnected = "FALSE"
floppy0.clientDevice = "TRUE"
ethernet0.present = "TRUE"
ethernet0.virtualDev = "e1000"
ethernet0.networkName = "solignis.local"
ethernet0.addressType = "generated"
guestOSAltName = "Ubuntu Linux (64-bit)"
guestOS = "ubuntulinux"
uuid.location = "56 4d e8 67 57 18 67 04-c8 68 14 eb b3 c7 be bf"
uuid.bios = "56 4d e8 67 57 18 67 04-c8 68 14 eb b3 c7 be bf"
vc.uuid = "52 c7 14 5c a0 eb f4 cc-b3 69 e1 6d ad d8 1a e7"
Вот весь цикл foreach, над которым я работаю.
my @virtual_machines;
foreach my $vm (keys %virtual_machines) {
push @virtual_machines, $vm;
}
foreach my $vm (@virtual_machines) {
my $vmx_file = $ssh1->capture("cat $virtual_machines{$vm}{VMX}");
if ($vmx_file =~ m/^\bguestOSAltName\b\s+\S\s+\W(?<GUEST_OS> .+[^")])\W/xm) {
$virtual_machines{$vm}{"OS"} = "$+{GUEST_OS}";
} else {
$virtual_machines{$vm}{"OS"} = "N/A";
}
if ($vmx_file =~ m/^\bguestOSAltName\b\s\S\s.+(?<ARCH> \d{2}\W\bbit\b)/xm) {
$virtual_machines{$vm}{"Architecture"} = "$+{ARCH}";
} else {
$virtual_machines{$vm}{"Architecture"} = "N/A";
}
}
Я думаю, что проблема в том, что я не могу сопоставить "(", потому что перед ним стоит выражение ". +", Чтобы оно совпадало со всем в строке текста, будь то буквенно-цифровой или пробел, или даже с такими символами, как hypens .
Есть идеи, как мне заставить это работать?
Это то, что я получаю для вывода из хеш-дампа.
$VAR1 = {
'NS02' => {
'ID' => '144',
'Version' => '7',
'OS' => 'Ubuntu Linux (64-bit',
'VMX' => '/vmfs/volumes/datastore2/NS02/NS02.vmx',
'Architecture' => '64-bit'
},
Часть блока кода, где я работаю с ARCH, работает безупречно, так что действительно мне нужно взломать часть (64-битная), если она существует, когда поиск запускается в (и нужно удалить предыдущее пробел перед (.
То, что я хочу, это превратить вышеупомянутый дамп хеша в это.
$VAR1 = {
'NS02' => {
'ID' => '144',
'Version' => '7',
'OS' => 'Ubuntu Linux',
'VMX' => '/vmfs/volumes/datastore2/NS02/NS02.vmx',
'Architecture' => '64-bit'
},
То же самое, за исключением (64-битной) части.