aws 命令将 json 字符串返回到 bash shell 内的标准输出。
$ aws ssm get-parameter --name /mysite/dev/email
{
"Parameter": {
"Name": "/mysite/dev/email",
"Type": "String",
"Value": "[email protected]",
"Version": 1
}
}
我想返回“Value”的值,而不用引号括起来。我使用了 awk 和 sed linux 程序的组合。基本上,awk 搜索输入中的每一行,并允许您返回具有匹配值的行。由于 awk 逐行扫描文件,允许您将行拆分为字段并对匹配的模式执行操作,因此我首先这样做:
$ aws ssm get-parameter --name /mysite/dev/email | awk -F: '/Value/ {print $2}'
"[email protected]",
正如您所看到的,我使用 : 作为通过 F 标志进行分隔。我将该行与字符串“Value”匹配,然后打印分隔字符串的第二部分,即值“[电子邮件受保护]”,
但引号和逗号不受欢迎。所以我必须使用 sed 和 -E 正则表达式标志来替换引号和逗号:
$ aws ssm get-parameter --name /mysite/dev/email | awk -F: '/Value/ {print $2}' | sed -E 's/"|",//g'
[email protected]
我得到了想要的结果,但我更愿意只使用 awk,而不是通过管道将 awk 传输到 sed。是否可以?
答案1
对于单行,您只需删除全部首先是逗号和引号。
awk '/Value/ { gsub(/[",]/,""); print $2}'
一个更好的 awk 翻译 | sed 管道将是
awk '/Value/ { gsub(/[",]/,"",$2); print $2}'
仅更改第二个字段中的值。
答案2
用于解析出顶层结构中keyjq
的值:Value
Parameter
aws ssm get-parameter --name /mysite/dev/email | jq -r '.Parameter.Value'
这还将额外解码该值的任何 JSON 编码,以便存储在 JSON 中的值返回为.\"The Admin\" <[email protected]>
"The Admin" <[email protected]>