awk와 sed를 모두 사용할 필요 없이 awk를 사용하여 bash 쉘에서 json 값을 추출합니다.

awk와 sed를 모두 사용할 필요 없이 awk를 사용하여 bash 쉘에서 json 값을 추출합니다.

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최상위 구조에서 키 값을 구문 분석하는 데 사용됩니다 .ValueParameter

aws ssm get-parameter --name /mysite/dev/email | jq -r '.Parameter.Value'

이는 JSON에 저장된 값이 로 반환되도록 값의 JSON 인코딩을 추가로 디코딩합니다.\"The Admin\" <[email protected]>"The Admin" <[email protected]>

관련 정보