【发布时间】:2021-05-25 04:47:17
【问题描述】:
我有一个具有这种重复结构的 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 选项,但我不知道如何使它工作。请问有人可以帮忙吗?
【问题讨论】:
-
你能解决一个更简单的问题吗?你能把
"abcabc":"a/b/c"改成"abcabc":"a-b-c"吗? -
如果只出现一次,那我可以。但是位置键多次出现,因此不确定如何限制任何正则表达式以仅捕获该部分。
-
你知道如何使用
t反复执行相同的替换吗? -
我的问题是如何编写一个正则表达式,以便一次匹配所有位置键。当我使用
\"location\":\".*\",时,这会找到location的第一次出现并匹配文件中",的最后一次出现。 -
sed通常不太适合此类任务。一般来说,JSON 的重要处理最好使用支持 JSON 的语言或模块或工具来完成。