从左到右替换一行中的字符串

从左到右替换一行中的字符串

我想要搜索和替换负值及其之前的值。这些值以逗号分隔。

例子:

ocv_sigma_cell_rise(table_7) {
    sigma_type : early_and_late;
    values("0.00616, 0.00505, 0.00337, -0.00026");
}

在此,我需要将负值“-0.00026”替换为其之前的值(此处为“0.00337”)。

负值需要在以“ocv”为常用词的文件中搜索。

答案1

对于这个受限的 ocv .lib 文件,您可以运行这个小的 Perl 代码。

perl -lne '
  BEGIN {
    $arc = qr/ocv_sigma_cell_(rise|fall)\([^)]*\)\s*\{/;
    $num = qr/\d+(?:\.\d*)?|\.\d+/;
  }
  next unless /$arc/ ... /\}/;
  push @A,$_;next unless /\}/;
  my $var = join "\n", splice @A;
  $var =~
  s{^\s*values\(\K(.*?)(?=\))}
   [
    local $_ = $1;
    1 while s/(?:"|\s)($num),\s+\K-$num(?=,|")/$1/;
     $_;
   ]xmse;
  print $var;
' your_ocv.lib

输出:

ocv_sigma_cell_rise(table_7) {
    sigma_type : early_and_late;
    values("0.00616, 0.00505, 0.00337, 0.00337");
}

相关内容