如何用单条sed正则替换JSON中l1和x2字段的值?
单条sed命令隐藏JSON中指定字段的值
需要处理的目标JSON:
{ "info": { "l1": 77, "x2": 77, }, "user": "2323", "id": "xxxx", "time": 1679955931845, "msgType": "oyui" }
问题说明
你之前使用的正则依赖零宽断言((?<=...)和(?=...)),但sed默认不支持这类语法,因此需要调整为sed兼容的写法,通过捕获组实现单条命令完成替换。
解决方案
使用启用扩展正则的sed命令,一次性匹配并替换l1和x2字段的值:
sed -E 's/("(l1|x2)":)[[:space:]]*[^,]+/\1 *** /g' input.json
命令解释
-E:启用扩展正则,减少符号转义的复杂度s/.../.../g:全局替换模式,处理所有匹配的字段("(l1|x2)":):捕获组,精准匹配"l1":或"x2":字段名部分[[:space:]]*:匹配字段名与值之间的任意空白字符(空格、制表符等)[^,]+:匹配字段值,直到遇到逗号(适配JSON字段的格式)\1 ***:将匹配内容替换为捕获的字段名部分,加上自定义的隐藏标记(这里用***,可根据需求修改)
替换后效果
{ "info": { "l1": *** , "x2": *** , }, "user": "2323", "id": "xxxx", "time": 1679955931845, "msgType": "oyui" }
如果需要统一用字符串格式的隐藏值,可调整命令为:
sed -E 's/("(l1|x2)":)[[:space:]]*("[^"]*"|[0-9]+)/\1 "***"/g' input.json
内容的提问来源于stack exchange,提问作者GensaGames
相关产品推荐
相关产品推荐

