我想要搜索和替换负值及其之前的值。这些值以逗号分隔。
例子:
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");
}