You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq去除Docker Engine API返回容器名的前置斜杠

这个问题我碰到过,核心原因是Docker API返回的Names字段是数组类型,而@tsv要求每行的元素都是字符串,直接把数组塞进去就会触发类型错误。另外还要处理掉名字前的斜杠,咱们一步步解决:

错误原因拆解

  • Docker Engine API返回的Names是数组(比如["/boring_feynman"]),而@tsv只能处理字符串/数值这类原子类型,数组无法直接解析,所以抛出array is not valid in a csv row错误。
  • 同时需要去除Names元素开头的前置斜杠,才能得到干净的容器名称。

修复后的完整命令

jq -r '
  # 生成表头和对应长度的分隔线
  (["Names","Image"] | (., map(length*"-"))),
  # 处理每个容器条目:提取Names并去斜杠,再匹配Image字段
  (.[] | [( .Names[0] | ltrimstr("/") ), .Image])
  # 转成TSV格式输出
  | @tsv
'

关键细节解释

  1. 处理Names字段:
    • .Names[0]:因为每个容器通常只有一个名字,直接取数组的第一个元素即可;如果你的场景存在多个容器名,可以用.Names | map(ltrimstr("/")) | join(", ")转成逗号分隔的字符串。
    • ltrimstr("/"):精准去掉字符串开头的斜杠,不会影响名称中间可能存在的斜杠(虽然容器名一般不会有)。
  2. 表头与分隔线:保留了你原来的逻辑,先输出表头,再输出和表头长度匹配的分隔线,让TSV结果更易读。
  3. @tsv兼容性:现在每个条目里的元素都是字符串类型,完全符合TSV的格式要求,不会再触发类型错误。

示例效果

假设Docker API返回的JSON片段是:

[
  {"Names": ["/boring_feynman"], "Image": "nginx:alpine"},
  {"Names": ["/sleepy_turing"], "Image": "ubuntu:latest"}
]

执行命令后输出的TSV:

Names	Image
-----	-----
boring_feynman	nginx:alpine
sleepy_turing	ubuntu:latest

内容的提问来源于stack exchange,提问作者Hammad Butt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:12:43