我有一个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?
谢谢!
答案 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/'