以下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如何实现这一点?使用regex?还是其他选择?
发布于 2017-05-03 11:13:57
IFS=', ' credArray=(`echo "$cred" | tr -d '"[]'`)
很简单就像..。那
测试
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
在和CentOS bash上进行测试
发布于 2017-05-03 10:07:57
我不太明白[
和]
是否在$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
发布于 2017-05-03 10:21:36
或者使用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)"
https://stackoverflow.com/questions/43755548
复制相似问题