2017-10-13 73 views
1

我從一些服務像這樣得到的字符串,Shell腳本列提取

{"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}} 

我想提取其中

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 

我試着用版本,但我知道沒有運氣的sed encodedHeader值。 對此的任何幫助

回答

0

以下是一種使用AWK的方法。

~$ myline={"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}} 

而且

~$ echo $myline | awk -F[:,] '{print $9 }' 

OUPUTS:

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 

[:,]匹配存在於列表中的單個字符。

,:是場分離器和所需的字段是數字9

+0

這個工作對我 – Beginner

+0

你可以隨時接受作爲答案,如果它做你w anted :) – zee

2

如果你有GNU awk然後

awk 'match($0,/"encodedHeader":"([^"]*)"/,arr){print arr[1]}' <<<"$line" 

測試結果:

$ line='{"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}}'; 
$ awk 'match($0,/"encodedHeader":"([^"]*)"/,arr){print arr[1]}' <<<"$line" 
SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 
+2

初學者我會建議你使用@ 3161993解決方案+1 :)。你不必擔心他被更改的字段數量。 – zee

0
awk -F\" '{print $16}' file 

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk