2013-04-04 128 views
0

我想在shell脚本的变量中提取userId的值。在shell脚本中提取键值

我有以下的varibale其设定值来动态&需要提取PT &用户id

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

任何一个可以告诉我如何提取shell脚本这些价值?

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

谢谢!

+0

[解析json与sed和awk](http://stackoverflow.com/questions/1955505/parsing-json-with-sed-and-awk) – graphite 2013-04-04 05:58:07

+0

@graphite - 我不想使用json解析器。 – 2013-04-04 05:59:28

+0

你读过其他答案吗? – graphite 2013-04-04 06:07:40

回答

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”和“用户id”,您可以使用值。

+0

它也打印双引号。如何去除双引号?我的var变量包含双引号,因此提取的值也有双引号。你能告诉我如何去掉引号吗? – 2013-04-04 06:21:38

+0

使用可以使用以下内容 - pt ='echo $ var | cut -d,-f1 | awk -F':''{print $ 2}'| tr -d'''' userId ='echo $ var | cut -d,-f2 | awk -F':''{print $ 2}'| tr -d'}'| tr -d'“''让我知道它是否有效。 – orNehPraka 2013-04-04 06:26:11

1

该字符串看起来像是一个JSON字符串,它最好使用专用的JSPN解析器,如underscore来解析此文本。一旦安装underscore cli你可以这样做:

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

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

虽然不推荐,但如果你真的要分析它的外壳里,你可以用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