Shell使用grep和sed命令提取json数据中指定字段的值

本文介绍如何使用Shell命令行工具,如cat、sed和grep,从JSON格式的文本文件中提取特定字段的值,例如dev_id和dev_name,并将结果存储在变量中以供后续使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例:

1.有一个example.txt文件,文件内容如下:

{“err_code”: 200,"err_msg": "this is no error", “status”: 1, “dev_name”: “mylinux”, “dev_id”: 123}

2.如果我们想要获取dev_id字段的值,可以在命令行下使用如下一行命令:

cat example.txt | sed 's/,/\n/g' | grep "dev_id" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g'

命令解释:

(1)第一个sed命令的意思是将json数据中的“,”替换为换行符“\n”,这样该串数据就变为每一行一个字段的内容,即按逗号分隔数据串。

(2)第二个grep命令的意思是查找“dev_id”关键字,并单列出来。

(3)第三个sed命令的意思是将(2)中的结果再次按冒号“:”进行分隔。

(4)第四个sed命令的意思是将(3)中的结果,删除第一行内容,即删除“dev_id”行。

(5)最后一个sed命令的意思是将最后的花括号“}”用空字符替换,最终得到我们想要的值。

3.如果我们想要获取dev_name字段的值,可以在命令行下使用如下一行命令:

cat example.txt | sed 's/,/\n/g' | grep "dev_name" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g'

命令解释:

前面四个sed、grep命令见上面的解释。

由于前面四个命令我们得到的结果为“mylinux”,因此需要将其中的引号去掉才是我们最终想要的结果mylinux。

sed 's/"//g'   的意思是将前面的结果中的引号“”用空字符代替,最后的g参数表示替换所有符合的引号“”。

4.如果我们想把上述结果存进变量里使用的话,可以使用下面的命令:

 
  1. dev_id=$(cat example.txt | sed 's/,/\n/g' | grep "dev_id" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g')

  2. echo $dev_id

同样的,对于dev_name字段,有如下命令:

 
  1. dev_name=$(cat example.txt | sed 's/,/\n/g' | grep "dev_id" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g')

  2. echo $dev_name

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值