Json 从目录中的所有文件中删除文本块

Json 从目录中的所有文件中删除文本块,json,bash,shell,Json,Bash,Shell,我在一个.json类型的目录中有100个文件。在这些文件中,我在所有文件中都有以下块 "bind_dev": [ "eth0", "bond0" ], 我想从所有扩展名为.json的文件中删除此块。如何使用linux shell实现这一点 { "name": "wnx_production", "description": "Wellnext", "cookbook_versions": { "fms-base": "

我在一个.json类型的目录中有100个文件。在这些文件中,我在所有文件中都有以下块

      "bind_dev": [
        "eth0",
        "bond0"
      ],
我想从所有扩展名为.json的文件中删除此块。如何使用linux shell实现这一点

{
  "name": "wnx_production",
  "description": "Wellnext",
  "cookbook_versions": {
    "fms-base": "= 1.0.49",
    "fms-zabbix": "= 0.1.35",
    "linuxad_auth": "= 0.2.75",
    "itcs104_bundle": "= 0.3.23",
    "policy_all_deep_security": "= 0.1.17",
    "fms-pdns": "= 0.1.38",
    "fms-yum": "= 0.1.17",
    "tscm": "= 1.0.29",
    "sudo": "= 2.7.10"
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
    "satellite-client": {
      "capsule": {
        "capsule_name": "dal13ammcaps01.imzcloud.ibmammsap.local"
      }
    },
    "kickstart_ip": "146.89.142.214",
    "tscm": {
      "kickstart_ip": "146.89.142.214",
      "bind_dev": [
        "eth0",
        "bond0"
      ],
      "server_ip": "169.55.192.110",
      "proxy_ip": "169.55.28.46",
      "installer_url": "http://146.89.142.214/post_data/pkg/tivoliscm/"
    },
    "sudo": {
      "include_sudoers_d": false,
      "suroot_alias": "SUROOT"
    },
    "itcs104_bundle": {
      "gem_source": {
        "ssl_verify": false,
        "clear": true
      }
    },
    "sshd_config": {
      "permitrootlogin": "without-password"
    },
    "chef-client-12": {
      "chef-client-location": "http://146.89.142.214/post_data/pkg/chef"
    }
  }
}
是从shell操作JSON数据的最佳方式。以下是如何使用它来处理每个文件:

for file in *.json; do
    jq 'del(.default_attributes.tscm.bind_dev)' "$file" > "$file.tmp" &&
        mv "$file.tmp" "$file"
done
是从shell操作JSON数据的最佳方式。以下是如何使用它来处理每个文件:

for file in *.json; do
    jq 'del(.default_attributes.tscm.bind_dev)' "$file" > "$file.tmp" &&
        mv "$file.tmp" "$file"
done

首先,我不会为此使用sed。就我个人而言,我会用Perl编写它,但这不是您要求的

第二,仔细测试,我的意思是,首先备份整个安装程序,然后运行几次,看看它做的都是您想要的,而且只是您想要的。(同样,使用Perl…但既然您要求…)

那太简单了。最好在正则表达式中添加更多细节,但有时太多会使它丢失一些东西,而不够多会使它删除一些您不想丢失的东西


c、 f:为了扩展sed正则表达式,祝你好运。

首先,我不会用sed来做这个。就我个人而言,我会用Perl编写它,但这不是您要求的

第二,仔细测试,我的意思是,首先备份整个安装程序,然后运行几次,看看它做的都是您想要的,而且只是您想要的。(同样,使用Perl…但既然您要求…)

那太简单了。最好在正则表达式中添加更多细节,但有时太多会使它丢失一些东西,而不够多会使它删除一些您不想丢失的东西

c、 f:到扩展sed正则表达式,祝你好运