Grep / awk,匹配完全字符串

时间:2016-05-09 15:04:21

标签: awk grep

我需要找到一些容器泊坞窗的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

如何匹配确切名称?

3 个答案:

答案 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 Fenechanswer所建议的那样:

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 适合您的情况