2017-10-13 77 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