Удаление блока текста из всех файлов в каталоге - PullRequest
0 голосов
/ 23 мая 2018

У меня есть 100 файлов в каталоге типа .json.В этих файлах у меня есть следующий блок во всех файлах

      "bind_dev": [
        "eth0",
        "bond0"
      ],

Я хочу удалить этот блок из всех файлов с расширением .json.Как это можно сделать с помощью оболочки Linux?

{
  "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"
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Во-первых, я бы не использовал sed для этого.Лично я написал бы это на Perl, но это не то, что вы просили.

Во-вторых, тщательно протестируйте это, и под осторожно Я имею в виду сначала сделайте резервную копию всей установки, затем запуститеэто несколько раз, и вы увидите, что он делает все, что вы хотите, и только то, что вы хотите.(Опять же, используйте Perl ... но так как вы спросили ...)

sed -r -n '/^\s*"bind_dev"\s*:.*/,/],/d' *.json

Это просто.Лучше добавить больше деталей к регулярному выражению, но иногда слишком много заставит его пропустить то, что недостаточно, заставит убрать то, что вы не хотели потерять.

cf: это руководство в расширенные регулярные выражения и удачи.

0 голосов
/ 23 мая 2018

jq - лучший способ манипулировать данными JSON из оболочки.Вот как вы можете использовать его для обработки каждого файла:

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