我有一个来自Curl响应的字符串,我想将所有“id”放入一个bash数组中,以便我以后可以使用它。
这是我卷曲回应的片段:
{“id”:“45bcd726916e452f814ffddda8a0885b”,“username”:“bob”,“email:”something@test.com“},{”username“:”bob“,”email:“something@test.com “},{” ID “:” 054f765f23f14957b5bcd46a8b6f9cf1" , “用户名”: “汤姆”, “电子邮件:” something2@test.com “},{” 用户名 “:” 鲍勃”, “电子邮件:” something@test.com “},{” ID “:” 9929928686a84e4a854c85b4ff93c1cf “ ”用户名“: ”山姆“, ”电子邮件:“ something@3test.com ”},{“ 用户名 ”:“ 鲍勃”, “电子邮件:” something@test.com “},........
我希望输出为
$ echo ${n[0]}
45bcd726916e452f814ffddda8a0885b
$ echo ${n[1]}
054f765f23f14957b5bcd46a8b6f9cf1
$ echo ${n[1]}
9929928686a84e4a854c85b4ff93c1cf
请帮忙,我已经被困了几个小时。
答案 0 :(得分:0)
假设您的字符串位于$str
,这应该有效:
n=($(echo $str | grep -o '"id":"[^"]*"' | cut -d '"' -f4))
答案 1 :(得分:0)
这应该有用,或者至少让你开始朝着正确的方向前进。
y=0
for id in $(curl|cut -f4 -d'"')
do
n[$y]=$id
let y++
done
答案 2 :(得分:0)
这个有效。
#!/bin/bash
N=() I=0
while read -r -d '}' LINE; do
if [[ $LINE == *'{"id":"'* ]]; then
LINE=${LINE#*'{"id":"'}
N[I++]=${LINE%%\"*}
fi
done < input
输入可以是文件,也可以是流程替换:
done < <(curl ...)