VIM:在双引号内交换json值

时间:2016-08-02 16:00:30

标签: json regex vim

我需要使用VIM编辑器在多行上的json文件中交换标记和值。

例如: 这样:

{"value":"PAE","tag":"project:aerospace;id:3364"} {"value":"#cybersecurity","tag":"project:aerospace;id:3178"} {"value":"Boeing","tag":"project:aerospace;id:3342"} {"value":"Airbus","tag":"project:aerospace;id:3335"}

需要:

{"tag":"project:aerospace;id:3364","value":"PAE"} {"tag":"project:aerospace;id:3178","value":"#cybersecurity"} {"tag":"project:aerospace;id:3342","value":"Boeing"} {"tag":"project:aerospace;id:3335","value":"Airbus"}

我已经使用:%s/tag/value/g(使用临时值)作为标记和值,但我需要知道如何交换第二和第四个双引号内的所有内容或逗号之前和之后的所有内容。

4 个答案:

答案 0 :(得分:4)

%norm! f,xdT{f}i,^R"

在上面的cmd中,^Rctrl-v ctrl-r

答案 1 :(得分:1)

:%s/{\([^,]*\),\([^,]*\)}/{\2,\1}/

那样的东西?

答案 2 :(得分:0)

这应该可以解决问题:

%s/\v("value":"[^"]+"),("tag":"[^"]+")/\2,\1/

使用"非常神奇"为了使事情更容易,保存两个组并使用反向引用替换它们。

答案 3 :(得分:0)

以下正则表达式适用于我:

%s/{("value":".*?"),("tag":".*?")}/{\2,\1}/g

在此处查看:https://regex101.com/r/xR7lR0/1