我在小屏幕上工作,并试图缩短该命令的输出,但我无法使其工作。
命令:docker container ls --all
输出(太宽!):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e56e7efd4c3c 137112412989.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:latest "/bin/bash" 32 minutes ago Exited (127) 31 minutes ago ami-test
我想要的输出:
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES
e56e7efd4c3c | 137112412989.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:latest | "/bin/bash" | 32 minutes ago | Exited (127) 31 minutes ago | ami-test
以下是我尝试过的大约 20 种变体,但均未奏效:
docker container ls --all | sed "s/\s+/|/g"
docker container ls --all 2>&1 | sed -e 's/\s+//g'
docker container ls --all 2&1> | sed -e 's/[[:space:]]*/ /'
docker container list --all | sed -e "s/\t/ /g"
我怀疑我对管道和/或 sed 的理解存在根本错误。
答案1
也许你也可以尝试使用 --format 选项。以下是关联到docker参考。
我尝试使用格式选项重新创建您想要的输出。
root@ubuntu:~# docker container ls --all --format "table {{.ID}} | {{.Image}} | {{.Command}} | {{.CreatedAt}} | {{.Status}} | {{.Ports}} | {{.Names}}"
CONTAINER ID | IMAGE | COMMAND | CREATED AT | STATUS | PORTS | NAMES
5b19f1d7efc1 | ubuntu | "bash" | 2018-10-14 08:11:03 +0000 UTC | Exited (0) 17 minutes ago | | jovial_spence
05250b252a98 | hello-world | "/hello" | 2018-10-14 08:10:10 +0000 UTC | Exited (0) 18 minutes ago | | practical_bohr
b206b0ad1f42 | hello-world | "/hello" | 2018-09-27 14:51:49 +0000 UTC | Exited (0) 2 weeks ago | | nifty_gates
root@ubuntu:~#
答案2
误解是 sed 默认使用基本正则表达式(https://www.gnu.org/software/gnulib/manual/html_node/ed-regular-expression-syntax.html) — “一个或多个”量词需要反斜杠\+
使用扩展正则表达式(https://www.gnu.org/software/gnulib/manual/html_node/egrep-regular-expression-syntax.html) 做这个:
docker container ls --all | sed -E 's/\s+/ | /g'
请注意,GNU sed 接受\s
。并非所有 sed 都接受。
答案3
通过使用以下工具编辑输出,您可以做的最好的事情sed
是:
docker container ls --all | sed 's/[[:space:]][[:space:]][[:space:]]*/ | /g'
这将在任何(符合 POSIX 标准的) sed 版本中工作(无需担心 GNU 支持或是否转义字符+
)和将需要 2 个以上的空格字符,这样你就不会得到额外的分隔符,例如32 | minutes | ago
实际上,s/ */ | /g
(三个文字空格然后是一个星号)就足够了,因为我怀疑您是否获得了制表符或更多奇特的空格字符。
请注意,“理想”答案应该具有正确对应的空白字段(在示例输出中,PORTS 为空)。问题所需的输出缺少 PORTS 的空白条目,这很好,因为否则将无法解析(不更改命令docker
或假设最多一个空白条目或对输出可能性有其他深入了解)。
所以,kottapar 的回答,它给出了更合适的docker
命令,是更可取的。