如何从shell命令的输出中提取引用字符串的内容

时间:2017-05-03 08:59:39

标签: shell

以下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 怎么做到这一点?使用正则表达式?或其他选择?

4 个答案:

答案 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。