首页 > 解决方案 > 如何使用 sed 用字符包围 JSON 值

问题描述

我想使用 sed 将一些字符附加到 JSON 值。
例如给出:

{"contactForm":{"title":"Mr","firstName":"Jimmy","phonenumber":"12341234"}}

我想变成:

{"contactForm":{"title":"_Mr_","firstName":"_Jimmy_","phonenumber":"_12341234_"}}

请注意,这些值仅用下划线括起来。

使用这个表达式几乎可以得到正确的匹配(除了匹配最后的花括号):

[^:]+(?=,|$)

参见示例: https ://regex101.com/r/nE5eV3/409

但是我什至无法将捕获作为起点打印:

sed 's/[^:]+(?=,|$)/\\1/'
{"contactForm":{"title":"Mr","firstName":"Jimmy","phonenumber":"12341234"}}
{"contactForm":{"title":"Mr","firstName":"Jimmy","phonenumber":"12341234"}}

我将如何使用 sed 将这些值用下划线括起来?

标签: jsonregexsed

解决方案


您可以使用

sed 's/:"\([^"]*\)"/:"_\1_"/g' file > newfile

POSIX BRE 模式匹配:

  • :"- 一个:"子串
  • \([^"]*\)- 捕获组 1:除"
  • "- 一个"字符。

RHS 包含一个\1占位符,用于粘贴存储在捕获组 #1 中的值。


推荐阅读