linux 数组里面是json,将JSON解析为shell脚本中的数组

小编典典

如果您确实无法使用适当的JSON解析器(例如[1]) ,请尝试 基于的解决方案

:jq awk

Bash 4.x:

readarray -t values < =3 {print $4}' myfile.json)

Bash 3.x:

IFS=$'\n' read -d '' -ra values < =3 {print $4}' myfile.json)

这会将所有属性 值 存储在Bash数组中${values[@]},您可以使用进行检查

declare -p values。

这些解决方案具有局限性:

每个媒体资源必须位于各自的行中,

所有值都必须用双引号引起来,

不支持嵌入式转义的双引号。

所有这些限制加强了推荐使用正确的JSON解析器的建议。

注意:以下替代解决方案使用Bash 4.x + readarray -t values命令,但它们也可以与Bash

3.x替代产品一起使用IFS=$'\n' read -d '' -ra values。

grep + cut组合:单个grep命令将不起作用(除非您使用 GNU- grep见下文),但增加了cut帮助:

readarray -t values <

GNU

grep:-P用于支持PCRE,PCRE支持\K删除到目前为止匹配的所有内容(一种替代后置断言的灵活方法)以及超前断言((?=...)):

readarray -t values <

最后,这是一个 纯Bash(3.x +)解决方案 :

就性能而言,使之成为可行替代方案的是, 在每个循环迭代 中 无需调用外部工具 ; 但是,对于较大的输入文件,基于外部实用程序的解决方案将更快。

#!/usr/bin/env bash

declare -a values # declare the array

# Read each line and use regex parsing (with Bash's `=~` operator)

# to extract the value.

while read -r line; do

# Extract the value from between the double quotes

# and add it to the array.

[[ $line =~ :[[:blank:]]+\"(.*)\" ]] && values+=( "${BASH_REMATCH[1]}" )

done < myfile.json

declare -p values # print the array

[1]这是 基于健壮jq的解决方案的外观(Bash 4.x):

readarray -t values <

2020-07-27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值