aws 명령은 json 문자열을 bash 셸 내의 표준 출력으로 반환합니다.
$ 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를 sed로 연결하는 대신 awk를 사용하고 싶습니다. 가능합니까?
답변1
한 줄의 경우 제거하면됩니다.모두먼저 쉼표와 따옴표가 있습니다.
awk '/Value/ { gsub(/[",]/,""); print $2}'
awk | sed 파이프의 더 나은 번역은 다음과 같습니다.
awk '/Value/ { gsub(/[",]/,"",$2); print $2}'
두 번째 필드의 값만 변경됩니다.
답변2
jq
최상위 구조에서 키 값을 구문 분석하는 데 사용됩니다 .Value
Parameter
aws ssm get-parameter --name /mysite/dev/email | jq -r '.Parameter.Value'
이는 JSON에 저장된 값이 로 반환되도록 값의 JSON 인코딩을 추가로 디코딩합니다.\"The Admin\" <[email protected]>
"The Admin" <[email protected]>