json - 如何使用 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 将这些值用下划线括起来?
解决方案
您可以使用
sed 's/:"\([^"]*\)"/:"_\1_"/g' file > newfile
POSIX BRE 模式匹配:
:"
- 一个:"
子串\([^"]*\)
- 捕获组 1:除"
"
- 一个"
字符。
RHS 包含一个\1
占位符,用于粘贴存储在捕获组 #1 中的值。
推荐阅读
- java - JVM关闭顺序和事务管理?
- database-design - 使用 Data Vault 建模 INFORMATION_SCHEMA
- r - 在 r 中对二元概率模型进行后测?
- java - 如何从 Java 中的 API 获取自定义数据
- odata - 使用 odata-core 将 sap:quickinfo 映射到生成的 Java 实体中
- c# - 从 C# 中的 Parquet 文件中读取前 100 行
- google-apps-script - 创建新的触发器问题
- python - 如何约束 Union 以使输入和输出类型匹配?
- html - 有没有办法从 url 中找到 iframe 链接?
- python - 使用 SSLError [X509] PEM lib (_ssl.c:4264) [Win10] 解决 pip 错误