通过shell脚本从curl结果中提取令牌

时间:2019-03-13 17:08:01

标签: json shell curl token

我写这个脚本

Lorem ipsum {# gallery src=[holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris] width=[400] height=[300] #}

但是所有这些(awk或sed)都是一样的

array(1) {
  [0] =>
  array(7) {
    [0] =>
    string(141) "{# gallery src=[holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris] width=[400] height=[300] #}"
    [1] =>
    string(3) "src"
    [2] =>
    string(96) "holiday_images/london] width=[400] height=[300] #} sid amet {# gallery src=[holiday_images/paris"
    [3] =>
    string(5) "width"
    [4] =>
    string(3) "400"
    [5] =>
    string(6) "height"
    [6] =>
    string(3) "300"
  }
}

我的目标是将令牌放入变量中以备后用。 预先谢谢你们。

2 个答案:

答案 0 :(得分:1)

您可以将结果保存到文件中,并在文件上使用grep命令,而不是使用cURL的直接结果。 可能是这样的:

curl -o boulou.txt http://localhost/identity/v3/auth/tokens && cat boulou.txt | grep "X-Subject-Token" | awk '{printf $2}'

编辑,如果只希望获得所需的输出,请将--silent添加到cURL命令:

curl -o boulou.txt http://localhost/identity/v3/auth/tokens --silent && cat boulou.txt | grep "X-Subject-Token" | awk '{printf $2}'

编辑2:如果要导出它并删除文件,则可以使用以下内容:

export OS_TOKEN=$(curl -o billy.txt hhttp://localhost/identity/v3/auth/tokens --silent &&  cat billy.txt | grep "X-Subject-Token" | awk '{printf $2}') && rm billy.txt

答案 1 :(得分:0)

“当内容存储在变量中时,当我将其传递给JSON文档时,如何使用grep / awk从curl中提取字段中的标头?”确实是一个非常棘手且独特的问题。

但是,如果您逐步模拟出代码的每个部分以缩小范围,您会发现这是您可以研究或询问的更简单的问题:

  

如何对变量内容使用grep / awk?

     

我有一个包含HTTP标头的变量,我想提取其中一个的值。这是一个示例:

variable='Foo: 1
Bar: 2
Baz: 3'
     

这就是我试图从2获得Bar的原因:

  # Just hangs
  tokenizer1=$variable `grep "Bar" | awk '{printf $2}'`
  # Is empty
  tokenizer2=$variable | `grep "Bar" | awk '{printf $2}'`

答案是使用echo传递内容,以便grep可以在stdin上读取它:

tokenizer3=$(echo "$variable" | grep "Bar" | awk '{printf $2}')

这很容易应用于您的示例:

tokenizer3=$(echo "$token" | grep "X-Subject-Token" | awk '{printf $2}')
echo "The value is $tokenizer3"