마지막 출력 줄에서 문자열을 추출하는 bash 스크립트

마지막 출력 줄에서 문자열을 추출하는 bash 스크립트

이 bash 스크립트는 동일한 스크립트의 다른 명령에 대한 입력으로 사용할 수 있도록 다음 명령의 출력에서 ​​"ami-774b7314" 문자열을 가져오려고 시도합니다.

aws ec2 describe-images --region ap-southeast-2 --owners amazon --output text --query 'Images[].{A1name:Name,A2id:ImageId}' --filters Name=is-public,Values=true,Name=name,Values=amzn-ami-*.*.*-amazon-ecs-optimized | sort

amzn-ami-2016.03.i-amazon-ecs-optimized ami-22a49541
amzn-ami-2016.03.j-amazon-ecs-optimized ami-862211e5
amzn-ami-2016.09.a-amazon-ecs-optimized ami-73407d10
amzn-ami-2016.09.b-amazon-ecs-optimized ami-5781be34
amzn-ami-2016.09.c-amazon-ecs-optimized ami-774b7314 <===== this line

형식이 영숫자 혼합인지 확인하고 그렇지 않으면 "잘못된 문자열"을 에코하고 스크립트를 종료합니다.

어떻게 하나요?

답변1

tail명령은 이러한 목적으로 사용될 수 있습니다. 입력의 마지막 몇 줄(기본적으로 10개)을 출력("꼬리")으로 제공합니다.

-n플래그를 사용하면 원하는 꼬리의 양을 정확하게 지정할 수 있습니다.

aws ec2 ... | sort | tail -n 1

올바른 형식을 따르는지 확인하려면 다음을 수행하십시오.

line="$( aws ec2 ... | sort | tail -n 1 )"

if [[ ! "$line" =~ ^amzn-ami-[0-9]{4}\.[0-9]{2}\.[a-z]-amazon-ecs-optimized\ ami-[0-9a-z]{8}$ ]]; then
    echo "bad string"
    exit 1
fi

네가 원한다면마지막 포인트마지막 줄은 cut다음을 사용하여 제거합니다.

line="$( aws ec2 ... | sort | tail -n 1 | cut -d ' ' -f 2 )"

-d ' ' -f 2비트는 "공백을 필드 구분 기호로 사용하고 두 번째 필드를 제공합니다"라고 말합니다.

그러면 정규 표현식도 더 짧아집니다.

if [[ ! "$line" =~ ^ami-[0-9a-z]{8}$ ]]; then
    echo "bad string"
    exit 1
fi

관련 정보