我拼凑了一个 Perl 脚本,将特定标签的特定属性替换为我需要的内容。脚本如下...
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
use utf8;
use open ':encoding(UTF-8)', ':std';
#ingest data
my $twig = XML::Twig -> new ->parsefile('test.xml');
#iterate all tags <host>
foreach my $host_id ( $twig -> get_xpath('//host') ) {
#check testname regex match
if ( $host_id -> att('id') == AAAA ) {
$host_id -> set_att('id', '1111');
}
}
#iterate all tags <guest>
foreach my $guest_host ( $twig -> get_xpath('//guest') ) {
#check testname regex match
if ( $guest_host -> att('host') == AAAA ) {
$guest_host -> set_att('host', '1111');
}
}
open ( my $output, ">", "new.xml" ) or die $!;
$twig -> set_pretty_print('indented');
$twig -> print ( $output );
我现在的问题是,我需要更改大约 100 个“主机”,为了便于编辑,我想编写一个单独的文本文件,其中记录了我要更改的“主机”以及我要更改的内容想要将它们更改为。像这样的东西...
hosts
AAAA => 1111
BBBB => 2222
CCCC => 3333
如何修改脚本以引用单独的文本文件并检查每个属性,然后相应地替换它们?
我真的不知道从哪里开始。当我用谷歌搜索时,我找不到任何我能理解的东西,看起来这就是我需要的。
只需从文件创建一个查找表。
my %host_mappings = (
"AAAA" => "1111",
"BBBB" => "2222",
"CCCC" => "3333",
);
那么就只剩下查找更新值的问题了。
my $new_host = $host_mappings{ $old_host } // $old_host;