bash - 选择未标记为 latest 的最新 ECR 图像
问题描述
我需要能够在没有标签 latest 的 ECR 存储库中选择最新的标记图像。
我正在尝试通过 aws cli 和 bash/jq 来实现这一点
aws ecr describe-images --repository-name <repo-name> --region us-east-1 --output text --query 'sort_by(imageDetails,& imagePushedAt)[*].imageTags[*]' | tr '\t' '\n' | tail -2
这里的imageTag
输出是
ajohn-feature-123
bgates-feature-345
该列表可以包含latest
作为条目之一。我想跳过该条目并在这里选择第一个不是最新的 imageTag。
感谢实现这一目标的任何帮助。
解决方案
假设您正在寻找最新的输出中的下一个条目,因为您已经在文本中获得了输出,您可以将输出通过管道传输到 sed 等:
aws ecr .... | sed -n '/latest/{n;p}'
搜索 aws cli 命令的输出并搜索字符串 latest。找到这个字符串时,跳到下一行输出并打印
使用 awk,一个接一个地考虑多个最新标签
aws ecr .... | awk '/latest/ { getline;while ($0=="latest") { getline } print $0 }'
将输出中的行与 latest 进行模式匹配,然后运行一个 while 循环,如果遇到字符串 latest 的另一个实例,则移动到下一行。
aws ecr .... | awk '/latest/&&cnt<1 { getline;while ($0=="latest") { getline } print $0;cnt++ } { arr[NR]=$0 } END { if (cnt=="") { print arr[1] } }'
awk 的另一种变体使用 cnt 确保只打印找到的第一个实例(如果有多个最新标签,其中一个不在另一个之后) 还创建一个包含每一行的数组 arr。如果没有找到最新的标签,则打印第一个标签。
推荐阅读
- cypress - 赛普拉斯 - 获取没有断言的元素
- css - 覆盖复选框和单选按钮的 Bootstrap 4 的 scss 值
- mysql - MYSQL - 更新/替换 wp_usermeta - 由其他表过滤
- r - 用双 Y 轴绘制 geom_bar() 和 geom_line() - geom_line() 覆盖 geom_bar() 时出错
- javascript - Quill.js 在编辑器中添加一个自定义的 javascript 函数
- google-cloud-firestore - Google Firestore 可扩展性限制
- azure - 在 Logic APP 中未触发的 SFTP 触发器
- jquery - jQuery .change() 事件在具有自动完成功能的移动设备上不起作用
- ios - UIFont(name: UIFont.systemFont(ofSize: 10).fontName, size: 10)?.fontName == UIFont.systemFont(ofSize: 10).fontName 在 iOS13 中为 false
- javascript - 尝试使用 bcrypt,比较并返回 Promise {
}