无法将sed输出存储到变量

时间:2018-10-05 12:56:40

标签: json bash sed

我是bash脚本的新手。 我收到一些json响应,而我仅从响应中获得一个属性。我想将其保存到变量中,但无法正常工作 token=$result |sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1 echo $token  它返回空行。 我不能使用jq或任何第三方工具。 请让我知道我在想什么。

2 个答案:

答案 0 :(得分:1)

您的命令应该是:

token=$(echo "$result" | sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1)

您需要使用echo在标准输出上打印变量的内容,并且需要使用命令替换$( )来将管道的输出分配给token

始终鼓励对变量进行报价,以避免出现空格和*之类的全局字符问题。


顺便说一句,请注意,您可能可以使用以下方法获得输出:

token=$(jq -r .access_token <<<"$result")

我知道您已经说过您不能使用jq,但这是一个独立的二进制文件(无需安装),并且以正确的方式对待JSON,而不是任意文本。

答案 1 :(得分:0)

尝试一下:

token="$(sed -E -n -e 's/^.*access_token": ?"//p' <<<"$result" | cut -d'"' -f1)"

说明:

  • token="$( script here )"意味着$ token被设置为subshell
  • 进程在command substituion中运行的脚本的输出/结果。 -E中的
  • sed允许Extended Regular Expressions。我们之所以这样想是因为JSON通常在:之后和下一个"之前包含一个空格。我们在空格后使用?来告诉sed,空格可能存在或可能不存在
  • <<<"$result"herestring,它以stdin代替文件将数据输入sed中。