Json 在Unix中替换文件中的字符串-替换匹配正则表达式的一部分

Json 在Unix中替换文件中的字符串-替换匹配正则表达式的一部分,json,unix,sed,jq,Json,Unix,Sed,Jq,我有一个这样重复结构的JSON文档 {"version":"21.0.0.1","artifact":"artifact","payload":[{"id":"ng-at-ng/at","name":"ng/at","location":"apmservices/at:21.3.0.2-l

我有一个这样重复结构的JSON文档

{"version":"21.0.0.1","artifact":"artifact","payload":[{"id":"ng-at-ng/at","name":"ng/at","location":"apmservices/at:21.3.0.2-linux-amd64","component":"core","tag":"21.3.0.2-linux-amd64"},{"id":"doi-dspintegrator-doi/dspintegrator","name":"doi/dspintegrator","location":"doi/1.3.    3/dspintegrator:2.0.0-RELEASE_183","component":"doi","tag":"2.0.0-RELEASE_183"}]}
我想用
-
替换所有
“location”
标记的值,只要有
/
。因此,替换后,上述文本变为:

{"version":"21.0.0.1","artifact":"artifact","payload":[{"id":"ng-at-ng/at","name":"ng/at","location":"apmservices-at:21.3.0.2-linux-amd64","component":"core","tag":"21.3.0.2-linux-amd64"}, {"id":"doi-dspintegrator-doi/dspintegrator","name":"doi/dspintegrator","location":"doi-1.3.3-dspintegrator:2.0.0-RELEASE_183","component":"doi","tag":"2.0.0-RELEASE_183"}]}
请注意,原始JSON文档中的
“location”
标记的值中可以有多个
/
-

通过阅读其他一些帖子,似乎应该使用带有捕获的
sed
中的
-E
选项,但我不确定如何使其工作。有人能帮忙吗?

使用:

或者,如果希望检查每个“位置”键,则无论该键出现在何处:

walk(if type == "object" and (.location|type=="string") 
     then .location |= gsub("/";"-") else . end)

你能解决一个更简单的问题吗?您能否将
“abcabc”:“a/b/c”
更改为
“abcabc”:“a-b-c”
?如果只有一次,那么我可以。但是位置键多次出现,因此不确定如何限制任何正则表达式仅捕获该部分。您知道如何使用
t
反复执行相同的替换吗?我的问题是如何编写正则表达式,使其一次匹配所有位置键。当我使用
\“location\”:\“*\”,
时,它会找到第一次出现的
location
,并匹配文件中最后一次出现的
sed
通常不适合这种任务。一般来说,JSON的非平凡处理最好使用支持JSON的语言、模块或工具来完成。
walk(if type == "object" and (.location|type=="string") 
     then .location |= gsub("/";"-") else . end)