如何使用sed用字符括住JSON值

问题描述 投票:1回答:1

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

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

我想转换为:

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

请注意,这些值仅包含下划线。

使用该表达式almost会得到正确的匹配项(除了匹配末尾的花括号):

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

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

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

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

我将如何使用sed将这些值加在下划线周围?

json regex sed
1个回答
1
投票

您可以使用

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

POSIX BRE模式匹配:

  • [:"-一个:"子字符串
  • [\([^"]*\)-捕获组1:"以外的0个或多个字符
  • ["-一个"字符。

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

© www.soinside.com 2019 - 2024. All rights reserved.