首页 > 解决方案 > sed/Awk/cut... 如何决定使用哪个来解析 Docker 输出?

问题描述

我的输出:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jenkins/jenkins     lts                 806f56c84444        8 days ago          703MB
mongo               latest              0da05d84b1fe        2 weeks ago         394MB

我想从输出中单独删除图像 ID。

我尝试使用cut

docker images | cut -d " " -f1
REPOSITORY
jenkins/jenkins

-f1只是给我存储库名称,如果我使用它-f3往往是空的。由于分隔符不是单个空格,我看不到如何获得所需的输出。

我们可以cut基于字段名称吗?

我阅读了文档并没有看到任何相关内容。我还看到有一种方法可以使用 sed/AWK 来实现这一点,我仍在研究中。

同时,有没有更简单的方法可以使用命令来实现这一点cut

我是 Unix/Linux 新手,如何确定更喜欢 Sed/AWK/Cut 中的哪一个?

标签: bashdockerawksedsh

解决方案


您必须将默认输出中的空格填充“挤压”为单个空格。

1 2== 1-space-space-2== 第 1 个空格之前的字段 1,第 1 和第 2 个空格之间的字段,第 2 个空格之后的字段 3。

cut -d' ' -f1==> '1'

cut -d' ' -f2==> '' 第一个和第二个分隔符之间的空字段

cut -d' ' -f3==> '2'

因此,在您的情况下,使用sed1 替换连续空格:

docker images | sed 's/ */ /g' | cut -d " " -f1,3

如果输出是固定列宽,那么您可以使用以下剪切变体:

docker images | cut -c1-20,41-60

这将删除第 41 到 60 列,我们可以在其中找到图像 ID。

如果输出TAB用于填充,您应该使用expand -t n使输出始终填充空间,然后应用适当的cut -cx,y,例如(数字可能需要调整):

docker images | expand -t 4 | cut -c1-20,41-60


推荐阅读