从 JSON 文件中删除子字符串(格式错误)

从 JSON 文件中删除子字符串(格式错误)

我正在尝试从 JSON 文件中删除不同的值。这不太漂亮,jq 返回 1 个编译错误。我正在从命令行(awk/sed)寻找解决方案。

这是我的 json 文件中的示例数据(类似于 docker-compose):

aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaa  
bbbb"PROTO 9080/tcp 9090/tcp"bbbbb
cccc"TEST PROTO 80 8080"ccccc

所有条目都可以多次找到,也可以在一行内找到。

使用替换后,它应该看起来像:

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

我尝试了 sed 和 (awk -F[\"]) 但无法获得一些有用的结果。如何做到这一点?

更新:我使示例更清晰..

有 3 种不同类型:...:

1: Delete from "MyPorts" to }},
2. Delete "Proto to \"
3. Delete from " PROTO" till one character before \", only if left from Proto is a space 

更新 2:如果示例数据也在一行中,则如何完成此操作,如下所示:

aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaabbbb"PROTO 9080/tcp 9090/tcp"bbbbbcccc"TEST PROTO 80 8080"ccccc

使用替换后,它应该看起来像:

aaaaaaaabbbbbbbbbcccc"TEST"ccccc

答案1

sed方法:

sed -E 's~("MyPorts.*\},|"PROTO[^"]+"| +PROTO[^"]+)~~' file

输出:

aaaaaaaa  
bbbbbbbbb
cccc"TEST"ccccc

一行字符串输入的额外方法:

$ s='aaaa"MyPorts":{"80/tcp":{},"8080/tcp":{},"9080/tcp":{},"9090/tcp":{}},aaaabbbb"PROTO 9080/tcp 9090/tcp"bbbbbcccc"TES^CPROTO 80 8080"ccccc'

$ sed -En 's~("MyPorts.+\},|"PROTO[^"]+"| +PROTO[^"]+)~~gp' <<<"$s"
aaaaaaaabbbbbbbbbcccc"TEST"ccccc

相关内容