从输出中获取引号之间的字符串,并将它们放入bash中的数组中

时间:2013-08-08 16:20:55

标签: bash curl sed awk grep

我有一个来自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

请帮忙,我已经被困了几个小时。

3 个答案:

答案 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 ...)