Shell使用grep和sed命令提取json数据中指定字段的值
示例:
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_id=$(cat example.txt | sed 's/,/\n/g' | grep "dev_id" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g')
echo $dev_id