perl:用另一个列表替换子字符串列表
perl: replacing a list of substrings by another list
我有第一个文件 file1
包含一个字符串 All cars are red.
我想用另一个列表替换初始字符串 cars red
中的单词列表 (list1
)包含 boats blue
的单词 list2
以获得此输出
All boats are blue.
这里的目标是用更大的要替换的单词列表和更大的字符串来替换多次出现的单词。
我想代码应该是这样的:
use strict;
use warnings;
open (my $list1, "<", "list1.txt") or die "cannot open list1\n";
open (my $list2, "<", "list2.txt") or die "cannot open list2\n";
open (my $file1, "<", "file1.txt") or die "cannot open file1\n";
my @replacer = <$list2>;
my @tobereplaced = <$list1>;
foreach my $word (@replacer) {
my $file1 =~ s/$tobereplaced/$word/gee; }
有人可以帮我得到想要的输出吗?
@tobereplaced = map split, @tobereplaced;
@replacer = map split, @replacer;
my %replacements;
@replacements{@tobereplaced} = @replacer;
my $pat = join '|', map quotemeta, @tobereplaced;
my $re = qr/$pat/;
while (<$file1>) {
s/\b($re)\b/$replacements{}/g;
print;
}
你没有指定输入文件的格式,所以我不得不做一些猜测。
我有第一个文件 file1
包含一个字符串 All cars are red.
我想用另一个列表替换初始字符串 cars red
中的单词列表 (list1
)包含 boats blue
的单词 list2
以获得此输出
All boats are blue.
这里的目标是用更大的要替换的单词列表和更大的字符串来替换多次出现的单词。
我想代码应该是这样的:
use strict;
use warnings;
open (my $list1, "<", "list1.txt") or die "cannot open list1\n";
open (my $list2, "<", "list2.txt") or die "cannot open list2\n";
open (my $file1, "<", "file1.txt") or die "cannot open file1\n";
my @replacer = <$list2>;
my @tobereplaced = <$list1>;
foreach my $word (@replacer) {
my $file1 =~ s/$tobereplaced/$word/gee; }
有人可以帮我得到想要的输出吗?
@tobereplaced = map split, @tobereplaced;
@replacer = map split, @replacer;
my %replacements;
@replacements{@tobereplaced} = @replacer;
my $pat = join '|', map quotemeta, @tobereplaced;
my $re = qr/$pat/;
while (<$file1>) {
s/\b($re)\b/$replacements{}/g;
print;
}
你没有指定输入文件的格式,所以我不得不做一些猜测。