在shell脚本中提取键值

时间:2013-04-04 05:48:30

标签: linux json shell unix

我想提取pt&的价值userId在shell脚本中的变量中。

我在动态和动态变量的变量中设置的值低于需要提取pt&用户id

{"pt":"PT-24fesxPGJIHOe714iaMV-13dd3872781-sin_pos","userId":"66254363666003"}

任何人都可以告诉我如何在shell脚本中提取这些值吗?

注意:我不想仅使用JSON解析器来解析2个字符串。

谢谢!

2 个答案:

答案 0 :(得分:1)

此字符串似乎是一个JSON字符串,最好使用专用的JSPN解析器(如 underscore )来解析此文本。安装underscore cli后,您可以执行以下操作:

# extract pt
echo $jsonStr | underscore select '.pt'

# extract userId
echo $jsonStr | underscore select '.userId'

虽然不推荐但是如果你真的想在shell中解析它,你可以使用这样的awk:

 awk -F, '$1 ~ "pt" {gsub(/[^:]+:"|"/, "", $1); print $1}
          $2 ~ "userId" {gsub(/[^:]+:"|"}/, "", $2); print $2}'

或者甚至更简单:

 awk -F'"' '{print $4 "\n" $8}'

<强>输出:

PT-24fesxPGJIHOe714iaMV-13dd3872781-sin_pos
66254363666003

答案 1 :(得分:0)

您可以使用以下脚本

var={"pt":"PT-24fesxPGJIHOe714iaMV-13dd3872781-sin_pos","userId":"66254363666003"}
echo $var
pt=`echo $var|cut -d, -f1|awk -F':' '{ print $2 }'`
echo $pt
userId=`echo $var|cut -d, -f2|awk -F':' '{ print $2 }'|tr -d '}'`
echo $userId

在此脚本中,将值存储在2个变量“pt”和“userId”中,您可以使用这些变量。