如何用sed动态替换K8s YAML第17行的ECR账号ID
问题描述
需要动态替换Kubernetes YAML文件第17行中ECR镜像地址里,位于image:和.dkr之间的任意内容为通过Terraform获取的AWS账号ID。原先的sed命令只能匹配{{ACCOUNT}}占位符,无法满足替换任意内容的需求。
待替换行示例:
image: {{ACCOUNT}}.dkr.ecr.us-east-1.amazonaws.com/ecr-repo:my-image
现有命令:
sed -i '17 s/{{ACCOUNT}}/${data.aws_caller_identity.current.account_id}/g' <filename>
解决方案
使用支持扩展正则表达式的sed命令,通过正则精准匹配image:到.dkr之间的任意内容并替换:
sed -i -E "17 s/image: \K.*(?=\.dkr)/${data.aws_caller_identity.current.account_id}/" <filename>
命令细节说明:
-E:启用扩展正则表达式,让正向预查等语法生效17:指定仅处理文件的第17行image: \K:匹配image:字符串后,用\K舍弃前面的匹配内容,只对后续目标部分进行替换.*(?=\.dkr):匹配任意字符直到遇到.dkr(正向预查(?=\.dkr)确保匹配范围截止到.dkr前,且不包含.dkr本身)${data.aws_caller_identity.current.account_id}:Terraform获取的目标AWS账号ID变量
这个命令会把第17行里image:和.dkr之间的所有内容替换为指定的账号ID,不管原来这部分是占位符还是其他任意字符。
内容的提问来源于stack exchange,提问作者curiousgeek
相关产品推荐
相关产品推荐

