为什么cut命令不适用于“docker image ls”命令?

时间:2018-05-31 13:34:47

标签: bash shell

我正在尝试获取特定图像的docker图像ID,所以我

$ docker image ls

REPOSITORY                                                          TAG                 IMAGE ID            CREATED             SIZE
123456789012.dkr.ecr.us-east-1.amazonaws.com/some-name1             60                  4a625fb9a2a4        5 hours ago         3.97GB
987654321012.dkr.ecr.us-east-1.amazonaws.com/some-other-name2       365                 59b27e46effc        6 days ago          3.98GB

我希望这能给我图像ID,在这种情况下是4a625fb9a2a4 ......

$ docker image ls | grep name1 | cut -d " " -f3

...但它没有,它给出了一个空白。我错过了什么?

这个NEEDS是一个简单的shell脚本,所以我可以将它嵌入到Jenkinsfile管道中的Groovy脚本中。

4 个答案:

答案 0 :(得分:4)

最好的办法是让docker images ls完成所有工作,而不是解析其默认输出。

$ docker image ls --filter "reference=*name1*" -q
4a625fb9a2a4

--filter取代grep命令,-q取代cut。还有一个--format选项可以更精确地控制输出,但-q实际上只是--format '{{.ID}}'的快捷方式。

如果由于某种原因,--filter无法满足您的需求,您始终可以使用--format生成更容易被其他命令解析的输出。

答案 1 :(得分:2)

因为每个数据之间有几个“”。

更简单的方法是将空格剥离到一个空格并剪切:

int oldNum = savedInstanceState.getInt("savedNum");

答案 2 :(得分:2)

我认为<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://fonts.googleapis.com/css?family=Dosis:300,400,600,700,800" rel="stylesheet"> <section class="centerpage"> <div class="container-fluid"> <div class="row container-flex"> <div class="col shirt-box"> sdfsdfs sdf sdf sdf sdf sdf </div> <div class="col shirt-box"> sdfsdfs sdf sdf sdf sdf sdf </div> </div> </div> </section>更适合拆分列式输出。例如:

awk

或者,您可以使用$ docker image ls | awk '/fedora/ {print $3}' cc510acfcd70 5292e27c6dac 422dc563ca32 改进输出,以便更好地使用--format

cut

答案 3 :(得分:0)

您可以使用“sed”命令转换“docker image ls”的输出,用未使用的char替换空格集,稍后可以使用“cut”命令来获取您感兴趣的字段。例如:

$ docker image ls | sed "s/  */#/g" | cut -f 3 -d "#"

在上面的示例中,您用'#'字符替换空格组,然后使用“cut”命令打印用-f编号的预期字段。