我想在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