Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

这篇具有很好参考价值的文章主要介绍了Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

jq工具安装

在线安装

sudo apt-get install jq # Ubuntu 系统

离线安装

如果你的服务器没有联网,则无法使用包管理器来安装 jq 工具。不过,你仍然可以通过以下步骤手动安装 jq 工具:

  1. 在另一台联网的计算机上下载 jq 的二进制文件。可以在 jq 的官方网站上找到适合你服务器架构的二进制文件。例如,如果你的服务器是 x86 64 位架构,则可以在以下链接中下载 jq 的二进制文件:
    https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64

其他版本下载点这:https://github.com/jqlang/jq/releases/

  1. 将下载的二进制文件传输到您的服务器。你可以使用 scp 命令或其他文件传输工具将文件传输到服务器。例如,如果你的服务器的 IP 地址是 192.168.0.100,你可以使用以下命令将文件传输到服务器:
scp jq-linux64 user@192.168.0.100:/home/user/

其中,user 是你在服务器上的用户名,/home/user/ 是你在服务器上的目标目录。

  1. 在服务器上设置 jq 的执行权限。使用以下命令将 jq 文件设置为可执行:
chmod +x /home/user/jq-linux64
  1. 将 jq 文件复制到你的 PATH 路径中。使用以下命令将 jq 文件复制到 /usr/local/bin/ 目录中:
sudo cp /home/user/jq-linux64 /usr/local/bin/jq

现在,你可以在服务器上使用 jq 工具了。

使用方法

读取和修改 JSON 文件中的一个字段(麻烦)

#!/bin/bash

# 读取 JSON 文件内容
json=$(cat example.json)

# 使用 jq 工具修改其中的字段
new_json=$(echo $json | jq '.field_to_modify = "new_value"')

# 将修改后的 JSON 内容写回文件中
echo $new_json > example.json

在上面的示例脚本中,我们首先使用 cat 命令读取 JSON 文件 example.json 的内容,并将其存储在一个变量 json 中。接下来,我们使用 jq 工具修改 JSON 中的一个字段,例如将名为 field_to_modify 的字段的值修改为 “new_value”。最后,我们将修改后的 JSON 内容写回到原始文件中。

请注意,使用 jq 工具需要在系统上安装该工具。如果您的系统上没有安装 jq,您可以使用以下命令进行安装:

读取和修改 JSON 文件中的一个字段(简洁)1

需求:

将json文件ky_ai_solution.json文件中的ServerIpPort的ip改成192.168.1.100,json文件内容如下:

(ky_ai_solution.json)

{
    "LocalIpPort": "0.0.0.0:17751",
    "ServerIpPort": "192.168.1.140:7777",
    "aiSolution": 2,
    "algoAppPath": "cw",
    "isapiPath": "kyai",
    "packagePath": "/ky/alg/"
}

(run.sh)

#!/bin/bash

# 读取 json 文件并修改 ServerIpPort 字段
jq '.ServerIpPort = "192.168.1.100:7777"' ky_ai_solution.json > tmp.json && mv tmp.json ky_ai_solution.json

这个脚本使用了 jq 工具来读取和修改 JSON 文件。首先,它将 ServerIpPort 字段的值更改为 192.168.1.100:7777,然后将修改后的 JSON 内容重定向到临时文件 tmp.json 中。最后,它使用 mv 命令将 tmp.json 文件重命名为 ky_ai_solution.json,以覆盖原始文件。

请确保将脚本中的文件名 ky_ai_solution.json 替换为你实际使用的 JSON 文件名。另外,如果你需要修改不同的字段或值,请相应地修改 jq 命令中的参数。

读取和修改 JSON 文件中的一个字段(简洁)2

需求:

将json文件ky_ai_solution.json文件中的CameraID的改成192dfdsfdsfdsf,json文件内容如下:

(ky_ai_solution.json)

{
    "CameraInfos": [
        {
            "CameraID": "CAMERAID_001",
            "Running": "1",
            "AlgorithmName": "AlgoType1",
            "SubAlgoName": "behavior.structured.data",
            "RtspAddress": "rtsp://admin:xxx@192.168.1.90:554/Streaming/Channels/101",
            "DeptID": "Dept_001",
            "AddrID": "Addr_001"
        }
    ]
}

(run.sh)

#!/bin/bash

# 读取 json 文件并修改 CameraID 字段
jq '.CameraInfos[0].CameraID = "192dfdsfdsfdsf"' ky_ai_solution.json > tmp.json && mv tmp.json ky_ai_solution.json

这个脚本使用了 jq 工具来读取和修改 JSON 文件。它先选择 CameraInfos 数组中的第一个元素,然后将 CameraID 字段的值更改为 192dfdsfdsfdsf。最后,它将修改后的 JSON 内容重定向到临时文件 tmp.json 中,并使用 mv 命令将 tmp.json 文件重命名为 ky_ai_solution.json,以覆盖原始文件。

请注意,如果 CameraInfos 数组中有多个元素,则需要根据需要修改 jq 命令以处理所有元素。另外,如果你需要修改不同的字段或值,请相应地修改 jq 命令中的参数。

20230329 这个稍复杂,读取json并替换另一个json字段一部分,加入了正则表达式

我有一个config.json,内容如下:
{
“ServerIp”: “192.168.1.140”
}
还有一个param.txt文件,内容如下:
{
“engineAddress”: “192.168.1.91:20228”,
“mediaServerAddress”: “192.168.1.91:17080”,
“logLevel”: “INFO”,
“localAddress”: “0.0.0.0:23031”,
“queueSize”: 1024
}
我需要一个shell脚本,用jq工具将config.json文件中ServerIp字段的值提取出来,然后将它替换param.txt中的engineAddress和mediaServerAddress中的ip

#!/bin/bash

# 从config.json文件中读取ServerIp字段的值
server_ip=$(jq -r '.ServerIp' config.json)

# 替换param.txt文件中engineAddress字段中的ip部分
jq --arg ip "$server_ip" '.engineAddress |= sub("[^:]+"; $ip)' param.txt > tmp.json

# 替换更新后的内容
mv tmp.json param.txt

# 替换param.txt文件中mediaServerAddress字段中的ip部分
jq --arg ip "$server_ip" '.mediaServerAddress |= sub("[^:]+"; $ip)' param.txt > tmp.json

# 替换更新后的内容
mv tmp.json param.txt

解释一下这个脚本的几个步骤:

  • 使用jq工具从config.json文件中读取ServerIp字段的值,并将其保存在server_ip变量中。

  • 使用jq工具更新param.txt文件中engineAddress字段的值。这里使用了–arg选项将server_ip变量传递给jq,然后使用sub函数将engineAddress字段中原有的ip部分替换为server_ip变量中保存的值。

  • 将更新后的内容保存在一个临时文件中,然后将其覆盖原文件。

  • 使用jq工具更新param.txt文件中mediaServerAddress字段的值。这里同样使用了–arg选项将server_ip变量传递给jq,然后使用sub函数将mediaServerAddress字段中原有的ip部分替换为server_ip变量中保存的值。

  • 将更新后的内容保存在一个临时文件中,然后将其覆盖原文件。

jq内置函数|=sub
|=:更新某个字段的值

|= 表示更新某个字段的值。具体而言,它接受两个参数:第一个参数是要更新的字段的名称或路径,第二个参数是新的值或更新字段的表达式。如果第二个参数是一个表达式,则表达式的值将被用作新的字段值。如果第二个参数是一个常量,则常量将被用作新的字段值。

例如,假设我们有一个JSON对象 obj,它有一个字段 foo 的值为 10。要将 foo 的值加上 5,可以使用以下命令:

echo '{"foo": 10}' | jq '.foo |= .+5'

结果:

{
  "foo": 15
}

这里的 |= .+5 就是一个更新字段的表达式,它表示将原来的字段值加上 5。

sub:替换字符串

sub 函数是用来替换字符串的。它接受两个参数:第一个参数是正则表达式,第二个参数是要替换成的字符串。具体而言,它会在输入的字符串中查找与正则表达式匹配的部分,并将其替换为指定的字符串。

例如,假设我们有一个字符串 "foo:123",我们想将其中的数字替换为 "456",可以使用以下命令:

echo 'foo:123' | jq 'sub("[0-9]+"; "456")'

结果:

foo:456
关于正则表达式[0-9]+

[0-9]+ 是一个正则表达式,表示匹配一个或多个数字字符。具体而言,它包含两个部分:

[0-9] 表示匹配任意一个数字字符,也可以写成 \d
+ 表示匹配前面的字符(这里是数字字符)一次或多次。
因此,[0-9]+ 表示匹配一个或多个数字字符,例如 123、4567 等。在 sub 函数中,它被用来匹配输入字符串中的数字部分,以便进行替换。

其他(直接把两个替换做到一起)
# 获取jq工具路径
JQ_TOOL="${SCRIPT_PATH}/${DEPLOY_DIR}/tools/jq/jq-linux64"

# 读取ServerIp字段的值
NEW_SERVER_IP=$(${JQ_TOOL} -r '.ServerIp' "${SCRIPT_PATH}/${CONFIG_FILE}")

# 校验ServerIp

# 将NEW_SERVER_IP写入ky_ai_solution.json
OLD_SERVER_PORT=$(${JQ_TOOL} -r '.ServerIpPort' "${KY_AI_SOLUTION_JSON_PATH}" | awk -F':' '{print $2}')
NEW_SERVER_IP_PORT="${NEW_SERVER_IP}:${OLD_SERVER_PORT}"
${JQ_TOOL} ".ServerIpPort = \"${NEW_SERVER_IP_PORT}\"" "${KY_AI_SOLUTION_JSON_PATH}" > tmp.json && mv tmp.json "${KY_AI_SOLUTION_JSON_PATH}" && chmod 777 "${KY_AI_SOLUTION_JSON_PATH}"

上面最后三句可直接合并为一句:

${JQ_TOOL} --arg ip "$NEW_SERVER_IP" '.ServerIpPort |= sub("[^:]+"; $ip)' "${KY_AI_SOLUTION_JSON_PATH}" >tmp.txt &&
    mv tmp.txt "${KY_AI_SOLUTION_JSON_PATH}" &&
    chmod 777 "${KY_AI_SOLUTION_JSON_PATH}"

jq的编译

x86版本的我直接下载jq-linux64下来就能跑了:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

但是在arm下,还得自行编译,我下载这个源码:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

然后拷贝到系统里,tar -xzf jq-1.6.tar.gz解压:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

然后我参考里面这个readme.md:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

然后执行这几条编译命令:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

执行这四条就可以了(一开始没执行autoreconf -fi给我报了一堆错误):

autoreconf -fi              # if building from git
./configure --with-oniguruma=builtin
make -j8
make check

然后最终可执行文件生成在这:

Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)

我把它拷贝到目标位置再改名成jq-linux64

注意,我不太清楚我们arm NX ubuntu20.04和ubuntu18.04的盒子有啥区别,我把在20.04上编译生成的文件拷贝到18.04上,还用不了。。。文章来源地址https://www.toymoban.com/news/detail-510200.html

到了这里,关于Linux shell jq工具(shell读取json、shell脚本读取json、shell json、json工具)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)

    1、第一个案例:helloworld 2、打印运行的python进程 3、获取并打印参数 4、用脚本写for循环 5、使用C语言风格的for命令 6、while循环案例 7、使用break跳出外部循环 8、使用continue命令 9、case案例 10、判断两个数是否相等 11、使用双圆括号 12、使用双方括号 13、反引号的使用 14、字

    2024年02月07日
    浏览(32)
  • linux 基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)上用 shell 脚本安装 elasticsearch 指南

    使用基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)操作系统。 拥有root权限或者sudo权限。 1.首先,创建一个名为install_elasticsearch.sh的文件,并打开该文件以编辑 2.然后,将以下内容粘贴到install_elasticsearch.sh文件中 3.保存并关闭文件 4.运行安装脚本 5.等待脚本执行完成,这可能

    2024年02月01日
    浏览(32)
  • shell脚本while循环、read读取控制台输入与函数

    声明: 以下为个人笔记,内容不完全正确,请谨慎参考。 while循环结构 while [条件判断] do 程序 done 脚本示例: 点击查看代码 简易写法: 点击查看代码 read 读取控制台输入 基本语法: read(选项)(参数) 1、选项 -p: 指定读取值时的字符; -t: 指定读取值等待时间(秒-s)如

    2024年04月22日
    浏览(41)
  • shell脚本文本处理工具

    声明: 以下内容为个人笔记,内容不完全正确,请谨慎参考。 cut: cut 工作是“剪”,具体来说就是在文件中负责剪切数据。cut 命令从文件的每个行剪切字节、字符和字段输出。 1、基本语法: cut [选项参数] filename 说明:默认分隔符是副表符 2、选项参数说明 选项参数:1)

    2024年04月25日
    浏览(21)
  • 在线Excel转JSON工具

    在线Excel转JSON工具 上传excel将数据转换成json格式

    2024年02月07日
    浏览(29)
  • Shell工具脚本-生成文件&下载资源并解析

    主要包含功能如下: 1.自动生成文件 2.下载文件并解析 #  @Author: lvzhihong #  @Date: 2023-08-29 08:43:41 #! /bin/bash #config project_code=(\\\"23861\\\"  \\\"23862\\\" \\\"23863\\\") project_out_root=\\\"aon_project_output\\\" project_apk_url=\\\"xxx/2023082904130232_APP_INFO_repo_10010111.xml\\\"; declare -A aon_module_feature_map aon_module_feature_map[\\\"gaze\\\"]=\\\"

    2024年02月11日
    浏览(24)
  • NVIDIA GPU驱动和CUDA工具包 Linux CentOS 7 在线安装指南

    挑选指定系统和对应的GPU型号下载驱动和CUDA工具包: Linux CentOS安装NVIDIA GPU驱动程序和NVIDIA CUDA工具包_centos安装显卡驱动和cuda_Entropy-Go的博客-CSDN博客 相比之下,本文是在线安装NVIDIA GPU驱动和CUDA工具包方式,省去挑选对应正确安装包的烦恼。 Nvidia官网指导: NVIDIA CUDA Insta

    2024年02月04日
    浏览(38)
  • 【Linux】shell脚本和bat脚本:

    一、脚本对应环境: 【1】shell:linux环境;后缀名为.sh 主要用在linux中,而linux系统对应的shell又有很多,如Bourne Shell(/usr/bin/sh或/bin/sh),又如Bourne Again Shell(/bin/bash)由于Bourne Again Shell(/bin/bash)免费且易用,故使用较多。 对应的脚本文件后缀名为.sh。 注: #! 告诉系统其

    2024年02月09日
    浏览(32)
  • 【Linux之Shell脚本实战】Linux创建新用户脚本

    1.要求用户输入用户名和密码,新建用户; 2.如果用户没有输入,则提醒退

    2023年04月17日
    浏览(29)
  • 【Linux命令-shell】虚拟机中创建shell脚本、查看当前路径、执行脚本

    目录 一、创建shell脚本 二、查看当前的路径 三、执行脚本 一、创建shell脚本 shell脚本的特点 提前将可执行的命令语句写入一个文件中 顺序执行 解释器逐行解释代码 常见的脚本有:shell、python、PHP...... 注:用什么解释器就是什么脚本 编写shell脚本: 步骤: 1、新建文件 2、

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包