我有一个包含以下内容的文件:
foo1 = 1
foo2 = 2
foo3 = 8
.
.
.
我需要用一部分内存哈希值替换该文件中的值(1,2,8 ...),具有相同键的值(foo1 - > 33,foo2 - > 44, foo3 ...)如何使用“s ///”运算符更改它?如果有其他优雅的方式来进行,我会很高兴知道。
感谢您的帮助,
Yohad。
答案 0 :(得分:6)
my %new_values = ( foo1 => 33, ... );
$data =~ s{^(?<key>\w+) = \K(?<old_value>.+)$}
{$new_values{$+{key}}}gem;
键是“e”标志,它允许您运行代码以确定替换。 (?<...>)
语法提高了可读性,\K
允许我们匹配整行但只替换值区域。 “g”标志尽可能多地重复替换,“m”标志使^...$
匹配一行而不是整个字符串。 (如果在应用正则表达式之前拆分行,则可能不需要g
和m
。)
答案 1 :(得分:2)
这是一个
%h = ("foo1"=>3, "foo2"=>5);
while (<>)
{
#Substitute value according to expression on right hand side
s/(\w+) = .*/$1 . " = ". $h{$1}/e;
print;
}
答案 2 :(得分:1)
单程
%hash = ("foo1"=>33,"foo2" => 44,"foo3"=>99);
while (<>){
chomp;
( $one , $two ) = split /\s+=\s+/, $_;
print "$one = $hash{$one} \n"
}
答案 3 :(得分:0)
S / regexPattern / replacementPattern /标志
“我是一个字符串!”
S / \ SAM /'S / G
“我是一个字符串!”
http://gnosis.cx/publish/programming/regular_expressions.html
根据描述,我真的无法理解你在做什么。你能提供样品输入和输出吗?