使用`sed`从JSON数组中删除所有元素

问题描述

我知道StackOverflow并非代码编写服务,但是在过去3个小时中,sed一直使我发疯。

总而言之,我需要修改我拥有的.json文件内容

文件的外观:

{
// ...
    "first": {
        "second": [
            "indexZero","theseStringsAreDynamic","soINeedToUseWildcard"
        ]
    }
// ...
}

所需结果:

{
// ...
    "first": {
        "second": [
        ]
    }
// ...
}

您做了什么?

我根据以下内容松散地尝试了大约一百万个变体:

sed -i 's/\"second\": \[.*\]/\"second\": []/' "my.json"

## ~ Which gives: ~
#
#    "first": {
#        "second": []
#            "indexZero",#            "theseStringsAreDynamic",#            "soINeedToUseWildcard"
#        ]
#    },

本质上,我需要从.json文件的数组中删除所有元素,因此,如果sed不是执行此工作的正确工具,请告诉我。

谢谢您的时间。

解决方法

该作业的正确工具是jq

$ jq '.first.second = []' input.json
{
  "first": {
    "second": []
  }
}

要替换原始文件,需要两个步骤-将输出重定向到临时文件,然后重命名:

jq '.first.second = []' orig.json > tmp.json && mv -f tmp.json orig.json