bash - 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 中的哪一个?
解决方案
您必须将默认输出中的空格填充“挤压”为单个空格。
1 2
== 1-space-space-2
== 第 1 个空格之前的字段 1,第 1 和第 2 个空格之间的字段,第 2 个空格之后的字段 3。
cut -d' ' -f1
==> '1'
cut -d' ' -f2
==> '' 第一个和第二个分隔符之间的空字段
cut -d' ' -f3
==> '2'
因此,在您的情况下,使用sed
1 替换连续空格:
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
推荐阅读
- php - 为 php ajax 播放声音通知
- laravel - 验证 laravel 唯一的另一个模式 postgresql
- android - 如何在回收站视图中使用编辑文本进行搜索?
- angular - 在拦截器中完成时如何等待响应
- javascript - 如何更改文本颜色取决于使用 javascript 进行 reactjs Web 应用程序的文本值?
- c++ - 结构体的重载函数向量的实例
- java - QueryDSL 如何创建带有自己连接的子查询?
- python-3.x - 如何创建日期字典作为键值对作为python中三个温度的列表
- php - 通过 FPDI 类将单元格添加到现有 PDF
- reactjs - 调用 setValue 时触发组件内部定义的 onChange