我需要找到一些容器泊坞窗的ID,但有些容器的名称相似:
$ docker images
REPOSITORY TAG IMAGE ID
app-node latest 620350b79c5a
app-node-temp latest 461c5143a985
如果我跑:
$ docker images | grep -w app-node-temp | awk -e '{print $3}'
461c5143a985
如果我改为运行:
$ docker images | grep -w app-node | awk -e '{print $3}'
620350b79c5a
461c5143a985
如何匹配确切名称?
答案 0 :(得分:5)
我会说使用awk进行精确的字符串匹配:
docker images | awk '$1 == "app-node" { print $3 }'
答案 1 :(得分:2)
虚线被视为非单词字符,因此当差异用短划线标记时,grep -w
将无效。
在上下文中,grep '^app-node[[:space:]]'
可行。它查找所需的名称后跟一个空格。
当然,grep
| awk
大部分时间都是反模式;最好使用:
docker images | awk '/^app-node[[:space:]]/ { print $3 }'
或者,使用awk
的更简单的解决方案再次使用相等 - 正如Tom Fenech中answer所建议的那样:
for server in app-node app-node-temp
do
docker images | awk -v server="$server" '$1 == server { print $3 }'
…
done
如果运行docker images
太昂贵,您可以运行一次并将输出捕获到文件中,然后扫描该文件。这显示了如何将shell变量传递到awk
脚本。
可能会运行管道来捕获容器的图像ID信息:
image_id=$(docker images | awk -v server="$server" '$1 == server { print $3 }')
答案 2 :(得分:0)
docker images -q
适合您的情况