2013-04-04 95 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