Начал писать это как комментарий, но получилось слишком сложно, поэтому второй ответ на perl. Учитывая ваш исходный файл, вы можете использовать аккуратный трюк perl для построения regex:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
#build key-value pairs
my %replace = map { /"(.+)"\s*:\s*"(.+)"/ } <DATA>;
print Dumper \%replace;
#take the keys of your hash, then build into capturing regex
my $search = join ( "|", map {quotemeta} keys %replace );
$search = qr/($search)/;
print "Using match regex of: $search\n";
#read stdin or files on command line, line by line
while ( <> ) {
#match regex repeatedly, replace with contents of hash.
s/$search/$replace{$1}/g;
print;
}
__DATA__
"yes" : "no"
"stop" : "go, go, go!"
"wee-ooo" : "ooooh nooo!"
"gooodbye" : "hello"
"high" : "low"
"why?" : "i don't know"
Мы генерируем хэш, используя многострочное совпадение шаблонов и map
для создания пар ключ-значение.
Мы создаем поисковый regex и используем полученные в нем значения для замены.
Использование <>
- магического файлового интерфейса perl - STDIN
или файлов, указанных в командной строке. Примерно так же, как это делает sed. (Вы можете использовать файл и читать его "нормально" для получения шаблона, использование DATA
чисто иллюстративное).