Вот быстрый и грязный скрипт, который вы можете использовать:
#!/usr/bin/perl
die "Use: replace.pl <file> <list1> <list2>" unless $#ARGV==2;
open LIST1, $ARGV[1] or die $ARGV[1].": $!";
open LIST2, $ARGV[2] or die $ARGV[2].": $!";
open FILE, $ARGV[0] or die $ARGV[0].": $!";
while (<LIST1>) {
chomp;
$key=$_;
$value=<LIST2>;
chomp $value;
$hash->{$key}=$value;
}
while (<FILE>) {
if (/^Loc: (.*)/) {
$repl=$hash->{$1};
}
if (/^Mob: (.*)/ and defined $repl) {
s/Mob: (.*)/Mob: $repl/;
$repl=undef;
}
print;
}
close LIST1;
close FILE;
close LIST1;
Надеюсь, я хорошо понял, чего вы пытаетесь достичь.Этот сценарий выводит результат в стандартный вывод и не изменяет строки, для которых нет соответствующих шаблонов в списках.Кроме того, предполагается, что списки имеют одинаковый размер, и в целом делает очень мало, чтобы избежать ошибок.