shell脚本修改json中某个字段的值

shell脚本修改json中某个字段的值

  • 思路:通过awk来找到旧数据,然后用sed来替换旧数据

源码

config.json

{
  "name": "the_name",
  "id": "132869",
  "content_url": "https://hot.example.com/",
  "enable_feature1": "true",
  "enable_feature2": "false"
}

config/mode1.sh

#!bin/bash
content_url_new="https://hot1.example.com/"
enable_feature1_new="true"
enable_feature2_new="true"

config/mode2.sh

#!bin/bash
content_url_new="https://hot2.example.com/"
enable_feature1_new="false"
enable_feature2_new="false"

main.sh

#!bin/bash

if [ "$1" != "mode1" -a "$1" != "mode2" ];then
    echo "tip:─┬─────── 您输入参数不对,请重试:"
    echo "     │─────── ‘mode1‘, 使用config/mode1.sh的配置"
    echo "     └─────── ‘mode2‘, 使用config/mode2.sh的配置"
    exit 0
fi

case $1 in
mode1)
    . config/mode1.sh
;;
mode2)
    . config/mode2.sh
;;
*)
    echo "Usage: sh main.sh [mode1|mode2]"
    exit;
esac

# 如果要修改的内容在文档中唯一,可以做全局修改
content_url_old=$(awk -F"\"" ‘/content_url/{print $4}‘ example.json)
sed -e "[email protected][email protected][email protected]" -i example.json

# 如果要修改的内容在文档中不唯一,就需要针对那一行做修改。(例如,这个例子中有两个布尔类型的值)
enable_feature1_line=$(awk -F"\"" ‘/enable_feature1/{print NR}‘ example.json) # 记住行号
enable_feature1_old=$(awk -F"\"" ‘/enable_feature1/{print $4}‘ example.json)  # 获取旧数据
sed -e "$enable_feature1_line [email protected][email protected][email protected]" -i example.json # 替换所在行的老数据

enable_feature2_line=$(awk -F"\"" ‘/enable_feature2/{print NR}‘ example.json) # 记住行号
enable_feature2_old=$(awk -F"\"" ‘/enable_feature2/{print $4}‘ example.json)  # 获取旧数据
sed -e "$enable_feature2_line [email protected][email protected][email protected]" -i example.json # 替换所在行的老数据

运行

sh main.sh mode1
sh main.sh mode2

其他方案

原文地址:https://www.cnblogs.com/lyloou/p/9852991.html

时间: 2024-10-24 19:58:42

shell脚本修改json中某个字段的值的相关文章

shell脚本修改文本中匹配行之前的行的方法

原创文件,欢迎阅读,禁止转载. 例子中是把 finish 前一行的 "yes" 改成 "YES"有一个方法就是利用sed+awk一起来完成. [email protected]:~$ cat a.txt line 0 is yes line 1 is yes line 2 is yes line 3 is yes finish line this line is no this line is no #//用awk找到匹配行号算出要修改的行 [email prote

Zabbix监控之Linux命令行/Shell脚本解析json

本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项. 为什么要使用json? json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件).关键在于json对Web程序或者java程序非常友好,对于开发人员来说,他们也喜欢使用json数据.业务逻辑.内部的依赖关系以及状态信息由程序员去做,运维人员只需要调用程序员开放出来的API接

Mac下通过shell脚本修改properties文件

通过shell脚本替换属性文件中的某行记录 假设有如下属性文件 demo.properties user.name=test user.password=123456 ............................... 需求:先需要通过shell 脚本将 user.name 和 user.password 的value值替换为实际需要的用户名和密码, 将可以通过如下方式实现: sed -i "s#^user.name=.*#user.name=用户名#g"  path/de

shell脚本处理JSON数据工具jq

shell脚本如何方便地处理JSON格式的数据呢,这里介绍一个工具:jq. 官方教程简单翻译如下. 1.获取JSON数据 我们以github上jq项目最新5条评论的JSON数据为例.获取数据如下: curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' 结果如下: [ { "sha": "d25341478381063d1c76e81b3a52e0592a7c997f", "co

第一个shell脚本——修改配置文件

有需求,可以让自己偷懒才是学习的真正动力.由于测试环境在构建代码之后总是需要手动修改配置文件,因此边学习边完成了一个shell脚本,可以一键修改. 定义了一个函数,输出信息以绿色字体显示. function echo_green { echo -e "\033[32m$1\033[0m" } 输出提示信息 echo_green "是否一键修改xxx?(y/n)" 读取键盘输入 read answer 要修改的配置文件有两类:一类是明确清楚应该修改哪些字符串,直接用替

添加、修改表中的字段

ALTER TABLE dbo.Table1 ADD Days INT NOT NULL CONSTRAINT DF_Table1_Days DEFAULT (0) ;--添加列,并给定默认值 ALTER TABLE dbo.Table1 ALTER COLUMN CreateBy CHAR(10)一次只能改一个字段 ; --修改表中字段的类型 ALTER TABLE dbo.Table1 DROP CONSTRAINT DF_aaahhh_city,DF_aaahhh_city ; --删除默

Linux 通过 shell 脚本修改密码

交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. passwd username 使用passwd username 修改 username 的密码:使用该命令会有提示,即进入了交互界面,输入密码即可. 使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了.此时可以使用如下两种方式修改密码: 方式1: ec

mysql修改表中某个字段的默认值

Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现. 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空alter table user add COLUMN new1 VA

将json中所有字段四舍五入保留n位小数

json中数据不规范,有时我们需要将数值(字符串类型的数值)统一保留多少位小数. 以下是我的代码,使用递归算法遍历json中所有的层.只要发现value值为浮点型或可转换成数值型的字符串则全部转换成浮点数: 具体代码如下: class RoundJSON(object): #data:需要处理的目标json,digit为保留多少位小数位默认保留4位 def round_data(self,data={},digit=4):#将data中的所有字段只要是数值则四舍五入,可以处理科学计数法 if(t