以下shell命令返回包含3个项目的输出:
cred="$(aws sts assume-role --role-arn arn:aws:iam::01234567899:role/test --role-session-name s3-access-example --query '[Credentials.AccessKeyId, Credentials.SecretAccessKey, Credentials.SessionToken]')"
echo $ cred返回以下输出:
[ "ASRDTDRSIJGISGDT", "trttr435", "DF/////eraesr43" ]
如何检索双引号之间的值?例如,trttr435 怎么做到这一点?使用正则表达式?或其他选择?
答案 0 :(得分:1)
如果[
和]
不在$cred
,或者你的预期输出是多少,我就没有意识到这一点,但这会在双引号之间返回所有内容:
$ awk '{while(match($0,/"[^"]+"/)){print substr($0,RSTART+1,RLENGTH-2);$0=substr($0,RSTART+RLENGTH)}}' file
ASRDTDRSIJGISGDT
trttr435
DF/////eraesr43
你可以并且可能想:
$ echo "$cred" | awk ... # add above script here
修改:如果您只想从第二个字段($2
)获取引用的字符串:
$ awk -F, '{match($2,/"[^"]+"/);print substr($2,RSTART+1,RLENGTH-2)}' file
trttr435
甚至:
$ awk -F, '{gsub(/^[^"]+"|"[^"]*$/,"",$2);print $2}' file
答案 1 :(得分:1)
cred='[ "ASRDTDRSIJGISGDT", "trttr435", "DF/////eraesr43" ]'
IFS=', ' credArray=(`echo "$cred" | tr -d '"[]'`)
for i in "${credArray[@]}"; do echo "[$i]"; done
echo "2nd parameter is ${credArray[1]}"
简单如......
<强>测试强>
[ASRDTDRSIJGISGDT]
[trttr435]
[DF/////eraesr43]
2nd parameter is trttr435
<强>输出强>
%CD%
在Mac OS bash和CentOS bash
上测试答案 2 :(得分:0)
或者使用python,因为cred的内容已经是一个有效的python数组:
#!/bin/bash
cred='[ "ASRDTDRSIJGISGDT", "trttr435", "DF/////eraesr43" ]'
python-script() {
local INDEX=$1
echo "arr=$cred"
echo "print(arr[$INDEX])"
}
item() {
local INDEX=$1
python-script "$INDEX" | python
}
echo "item1=$(item 1)"
echo "item2=$(item 2)"
答案 3 :(得分:0)
提取所需值的另一种原始但有效的方法是使用awk&#34;作为拆分分隔符。在这种情况下,有效头寸为2美元,4美元,6美元
OUT="[ \"ASRDTDRSIJGISGDT\", \"trttr435\", \"DF/////eraesr43\" ]"
echo $OUT | awk -F '"' '{print $4}'
如果你需要进行大量的字符串解析,我建议你使用python。