我想在shell脚本的变量中提取userId的值。在shell脚本中提取键值
我有以下的varibale其设定值来动态&需要提取PT &用户id
{"pt":"PT-24fesxPGJIHOe714iaMV-13dd3872781-sin_pos","userId":"66254363666003"}
任何一个可以告诉我如何提取shell脚本这些价值?
注意:我不想仅使用JSON解析器来解析2个字符串。
谢谢!
我想在shell脚本的变量中提取userId的值。在shell脚本中提取键值
我有以下的varibale其设定值来动态&需要提取PT &用户id
{"pt":"PT-24fesxPGJIHOe714iaMV-13dd3872781-sin_pos","userId":"66254363666003"}
任何一个可以告诉我如何提取shell脚本这些价值?
注意:我不想仅使用JSON解析器来解析2个字符串。
谢谢!
您可以使用下面的脚本
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”,您可以使用值。
它也打印双引号。如何去除双引号?我的var变量包含双引号,因此提取的值也有双引号。你能告诉我如何去掉引号吗? – 2013-04-04 06:21:38
使用可以使用以下内容 - 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
该字符串看起来像是一个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
[解析json与sed和awk](http://stackoverflow.com/questions/1955505/parsing-json-with-sed-and-awk) – graphite 2013-04-04 05:58:07
@graphite - 我不想使用json解析器。 – 2013-04-04 05:59:28
你读过其他答案吗? – graphite 2013-04-04 06:07:40