我需要将.json文件中的值乘以常量,然后偶然发现了VIM。我对它的工作方式有一个想法,但我无法正确编写代码。
我在这里找到了一个可以做到这一点的解决方案,但是它对我不起作用。
这是我数据的一部分:
{
"y":-1.22895,
"x":238.742,
"z":11.9502,
"t":105.089
},
{
"y":-2.97314,
"x":233.357,
"z":11.9462,
"t":105.219
},
{
"y":-4.43459,
"x":228.235,
"z":11.9494,
"t":105.34
},
{
"y":-6.14338,
"x":221.428,
"z":11.9735,
"t":105.497
},
{
"y":-7.74595,
"x":213.972,
"z":11.9694,
"t":105.664
},
{
"y":-8.85145,
"x":207.862,
"z":11.9787,
"t":105.798
},
{
"y":-9.909,
"x":200.992,
"z":11.9853,
"t":105.946
},
{
"y":-10.7051,
"x":194.46,
"z":11.9934,
"t":106.083
},
{
"y":-11.5073,
"x":186.585,
"z":11.9994,
"t":106.246
},
{
"y":-12.2703,
"x":176.342,
"z":11.9982,
"t":106.452
},
{
"y":-13.0953,
"x":162.276,
"z":11.9976,
"t":106.728
},
{
"y":-13.8057,
"x":146.301,
"z":11.9982,
"t":107.031
},
{
"y":-14.2355,
"x":133.919,
"z":11.9901,
"t":107.26
},
{
"y":-14.3586,
"x":120.712,
"z":11.9926,
"t":107.501
},
{
"y":-14.2397,
"x":107.96,
"z":11.9912,
"t":107.73
},
{
"y":-13.7702,
"x":84.152,
"z":11.9902,
"t":108.149
},
{
"y":-13.2214,
"x":65.2566,
"z":11.9886,
"t":108.473
},
{
"y":-12.4048,
"x":48.9632,
"z":11.9907,
"t":108.748
},
{
"y":-10.9569,
"x":26.4007,
"z":11.9888,
"t":109.122
},
{
"y":-9.78734,
"x":6.85818,
"z":11.9832,
"t":109.439
},
{
"y":-9.30135,
"x":-2.72265,
"z":11.9493,
"t":109.594
},
{
"y":-7.90726,
"x":-33.3971,
"z":12.012,
"t":110.14
},
{
"y":-6.8483,
"x":-56.5212,
"z":11.916,
"t":110.611
},
{
"y":-6.12536,
"x":-71.8311,
"z":11.5912,
"t":110.955
},
{
"y":-4.54125,
"x":-106.279,
"z":10.9337,
"t":111.887
},
{
"y":-3.8711,
"x":-123.009,
"z":11.3316,
"t":112.511
},
{
"y":-3.42416,
"x":-138.673,
"z":11.8336,
"t":113.365
},
{
"y":-3.45456,
"x":-142.097,
"z":11.9435,
"t":113.649
},
{
"y":-3.62539,
"x":-146.275,
"z":12.0535,
"t":114.203
},
{
"y":-3.94087,
"x":-147.712,
"z":12.0764,
"t":114.672
},
{
"y":-3.96313,
"x":-147.874,
"z":12.1092,
"t":115.127
},
{
"y":-3.96123,
"x":-147.874,
"z":12.096,
"t":115.737
},
{
"y":-3.96069,
"x":-147.875,
"z":12.0966,
"t":116.192
},
{
"y":-3.96119,
"x":-147.876,
"z":12.098,
"t":116.592
}
我想替换t值,所以我运行了以下命令:
:%s"t":\(d\+\)@\='"t"'.(submatch(1) *0.9)@g
但是我只是遇到一个错误,说找不到"t":\(d\*\)
。
答案 0 :(得分:0)
这应该有效:
%s/\("t":\)\(\d\+\(\.\d\+\)\?\)/\=submatch(1) . string((submatch(2) * 0.9))/g
一般替换采用以下模式:
:%s/pattern/replace/g
g->表示替换所有匹配项
在表达式替换的情况下,我们以\=
开始替换部分。之后的所有内容都会是一个表达式,用于评估要替换的文本。
来自h: sub-expression-replace
:
The whole matched text can be accessed with "submatch(0)". The text matched
with the first pair of () with "submatch(1)". Likewise for further
sub-matches in ().
因此,我们将与pattern
匹配的"t":
用第一对括号括起来,将数字与第二对()
括起来。请注意,括号是辅助的,我们要添加用于使用submatch
。之后,我们使用字符串连接来打印预期的输出。