在bash中提取值

时间:2015-02-20 05:55:11

标签: bash

我有一个bash变量,并为其分配了以下值:

# echo $b
{"tid": "session", "id": "9c7decd9-29d4-4d88-8fca-56d3b7b07bd5"}

当我尝试从变量'b'中提取UUId时:

# temp=$(echo $b | awk '{print $4}')   
# echo $temp
"9c7decd9-29d4-4d88-8fca-56d3b7b07bd5"}

......我最后得到了额外的鲜花支架。我如何获得UUID?

谢谢!

3 个答案:

答案 0 :(得分:2)

你拥有的是JSON;所以使用a JSON tool来操纵它。

jq -r .id <<<"$b"

如果您想保留引号,请删除-r选项。

无论您使用哪种工具,总是将shell变量放在双引号中,除非您特别要求shell对该值执行分词和通配符扩展。

教育从业者使用结构感知工具进行结构化数据的斗争已达到epic的高度并且一直没有减弱。在您决定使用快速和肮脏的方法之前,至少要确保您了解危险(技术和心理)。

答案 1 :(得分:1)

您可以将grep -oP与PCRE正则表达式一起使用:

b='{"tid": "session", "id": "9c7decd9-29d4-4d88-8fca-56d3b7b07bd5"}'
temp=$(grep -oP '"id": +"\K[^"]+' <<< "$b")

echo "$temp"
9c7decd9-29d4-4d88-8fca-56d3b7b07bd5

答案 2 :(得分:0)

使用此

 echo $b | sed 's/.*: \([^\}]*\)\}/\1/'

否则,

 echo $b | sed 's/.*id: \([^\}]*\)\}/\1/'