0

我有一个 my_file.json 文件,其中包含如下无效的 json,如果“名称”:my_script.py,我需要删除从“{”到“}”的行。

[
            {
                "use":                     abcd   
                "name":                    my_script.py
                "contact":                 xyz
                "time":                    11:22:33
             },
            {
                "use":                     abcd   
                "name":                    some_other_script.py
                "contact":                 xyz
                "time":                    11:22:33
             },
            {
                "use":                     abcd   
                "name":                    my_script.py
                "contact":                 xyz
                "time":                    11:22:33
             }
]

我在sed下面试过,

sed '//{/ {:a;/}/!{N;ba};/my_script/d}' my_file.json

但它不起作用并给我错误

"sed: -e expression#1, char 11: `}' doesn't want any addresses".
4

1 回答 1

4

这可能对您有用(GNU sed):

sed '/{/{:a;N;/}/!ba;/my_script\.py/d}' file

收集{和之间的行},如果这些行包含my_script.py删除它们。

当前示例不是 json,但这可能是一个更强大的解决方案:

sed 's/\S\+/"&"/2;T;N;/}/!s/\n/,&/;P;D' file |
jq '[ .[]|select(.name!="my_script.py") ]'
于 2020-09-22T05:55:02.210 回答