Perl正则表达式替换

Ste*_*fan 0 regex perl yaml replace str-replace

我对Perl很新,并且有以下问题:我正在尝试.yml用不同的值替换文件中的版本号.这就是我的正则表达式:

version:\s*([^\s]+)
Run Code Online (Sandbox Code Playgroud)

它到目前为止工作,但它没有做我喜欢做的事情.

这里是我目前拥有的代码,以及用于替换.yml文件中的值的Perl语句.

文件内容(./ test.yml):

app:
  version: 1.2
  name: abc
Run Code Online (Sandbox Code Playgroud)

码:

$search = "version:\s*([^\s]+)";
$replace = '1.3';
perl -pie 's/$search/$replace/m' ./test.yml;
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

ike*_*ami 5

你为什么要尝试在一行中重新实现YAML解析器?!

perl -MYAML=DumpFile,LoadFile -e'
   my $d = LoadFile($ARGV[0]);
   $d->{app}{version} = "1.3";
   DumpFile($ARGV[0], $d);
' test.yml
Run Code Online (Sandbox Code Playgroud)

新版本似乎不太可能像这样硬编码.