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