从Linux命令的json样式输出中提取变量



我尝试在linux系统中使用AWS秘密管理器。我可以使用aws cli命令

aws secretsmanager get-secret-value --secret-id abc_account --version-stage AWSCURRENT

得到以下输出

{
"ARN": "arn:aws:secretsmanager:us-east-1:123456789:secret:abc_account-XhteiW",
"Name": "abc_account",
"VersionId": "89637ef4-4594-4c63-9887-3f7d2c7ccc6f",
"SecretString": "{"username":"abc_account","password":"PASSWORD111"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": "2021-02-08T23:57:58.325000-05:00"
}

我需要的是将密码PASSWORD111保存到linux中的变量var1中。就像

var1=$(aws secretsmanager get-secret-value --secret-id svc_vma_insights_data_platform --version-stage AWSCURRENT | awk XXXXXX )
or 
var1=$(aws secretsmanager get-secret-value --secret-id svc_vma_insights_data_platform --version-stage AWSCURRENT | grep XXXXXX )

这是从JSON输出中提取秘密字符串,然后从中提取密码JSON:

passwd=$(aws ...  | jq -r '.SecretString' | jq -r '.password')

在linux上你可以试试gnu grep:

var1=$(aws ... | grep -oP 'passwordW+K[^"\]+')
echo "$var1"
PASSWORD111

命令正则表达式:

  • passwordW+:匹配文本password后面跟着1+非单词字符
  • K: Reset match info
  • [^"\]+:匹配非"的任何字符的1+

最新更新