命令行curl流输出

时间:2015-08-06 10:00:03

标签: curl command-line output

我跑

curl -X POST'http://172.24.0.40:4243/build?t=basejava8'

并获得curl输出

  

{“stream”:“Step 0:FROM phusion / baseimage:0.9.16 \ n”} {“stream”:“   --- \ u003e 5a14c1498ff4 \ n“} {”stream“:”步骤1:CMD / sbin / my_init \ n“} {”stream“:”--- \ u003e使用缓存\ n“} {”stream“: “--- \ u003e   9ca43c73f936 \ n“} {”stream“:”步骤2:运行apt-get update \ u0026 \ u0026
  DEBIAN_FRONTEND =非交互式apt-get install -y
  ca-certificates \ n“} {”stream“:”--- \ u003e使用缓存\ n“} {”stream“:”   --- \ u003e b5dcbe0f1c27 \ n“} {”stream“:”步骤3:运行echo oracle-java8-installer shared / accepted-oracle-license-v1-1 select true   | debconf-set-selections \ u0026 add-apt-repository -y   ppa:webupd8team / java \ u0026 \ u0026 apt-get update \ u0026 \ u0026
  apt-get install -y oracle-java8-installer \ u0026 apt-get   安装-y oracle-java8-set-default \ u0026 \ r00 -rf   / var / lib / apt / lists / * \ u0026 \ u0026 rm -rf   / var / cache / oracle-jdk8-installer \ n“} {”stream“:”--- \ u003e使用   cache \ n“} {”stream“:”--- \ u003e 4eaa2e3796a2 \ n“} {”stream“:”第4步:   ENV JAVA_HOME / usr / lib / jvm / java-8-oracle \ n“} {”stream“:”--- \ u003e   使用缓存\ n“} {”stream“:”--- \ u003e 5d8bfb398fb6 \ n“}   {“stream”:“已成功构建5d8bfb398fb6 \ n”}

是否可以避免输出中的括号和“流”,即通过卷曲参数作为纯文本?

1 个答案:

答案 0 :(得分:1)

您的问题与curl无关:您所看到的是该服务(在本例中为Docker)实际上为您提供的内容。

尽管如此,虽然您可以尝试使用正则表达式提取所需的值,但我建议您使用JSON解析器来解析每一行。在您的示例中,每一行看起来都像{"stream":"..."},但Docker API文档中的示例显示错误也表示为JSON流行:

HTTP/1.1 200 OK
Content-Type: application/json

{"stream": "Step 1..."}
{"stream": "..."}
{"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}

在命令行上执行JSON解析的有用工具是 jq 。如果您只想要每行的-r键的原始(stream)值,您可以执行以下操作:

curl -X POST '...' | jq -r .stream

这会忽略(打印空行)输入中的非流线。

有关详细信息,请参阅Docker documentationjq manual