如何通过 BASH 中的 sed 命令从 Json 文件中删除 Json 对象

Jit*_*dav 2 bash awk json sed

我有一个 json 文件,其中需要删除一个 json 对象。有什么方法可以仅通过 sed 命令删除它。我的示例文件如下。

{
        "name": "ABC",
        "description": "XYZ",
        "versions": {

        },
        "json_class": "Chef::Environment",
        "chef_type": "environment",
        "default_attributes": {

        },
        "override_attributes": {
          "company": {
            "xyz": {
                    "mailer":{
        "smtp_host": "Some IP",
        "imap_host": "Some Host",
    "imap_user": "Some UserId",
    "reply_to": "Some User Id",
    "outbound_user": "",
    "imap_mail_domain": "compute.oraclecloud.com",
    "imap_password": ""},

                    "logicaldomainname": ""
                      }
                      }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这个文件中,我想通过 sed 命令从文件中删除邮件程序对象。请看一看,让我知道是否可以通过 sed 命令。

我这次删除的主要动机是用新的邮件程序对象替换这个对象。以便下次发布另一个邮件程序对象时,我们会将其附加到 xyz json 对象中。

预期输出:

{
        "name": "ABC",
        "description": "",
        "version": {

        },
        "json_class": "Chef::Environment",
        "chef_type": "environment",
        "default_attributes": {

        },
        "override_attributes": {
          "Company": {
            "XYZ": {
                    "logicaldomainname": ""
                      }
                      }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Joh*_*est 6

使用sed:

sed '/\"mailer\"/,/}/ d; /^$/d' 1.a
Run Code Online (Sandbox Code Playgroud)

“从mailer第一个}删除,然后删除所有空行(您输入的有一个)”。

覆盖文件(“就地”)

sed -i ...
Run Code Online (Sandbox Code Playgroud)

注意:适用于多行文件(如你的)。

  • 这非常适合删除 package.json 文件的“devDependencies”部分!谢谢! (2认同)

che*_*ner 5

您应该强烈考虑解决禁止jq以下内容的许可问题:

jq 'del(.override_attributes.company.xyz.mailer) | .description=""' input.json
Run Code Online (Sandbox Code Playgroud)