如何使用 bash 从字符串中提取字段

How to extract a field from a string with bash

我的脚本输出如下所示

[{"fileName":"animated.avi","movieId":"34802240145","url":"http://vu.mycdn.me/upload.do?sig=2223a95d7e51832a09d03aa2f23ad3dec0a2c430\u0026expires=1441573849826\u0026clientType=0\u0026id=34802240145\u0026userId=569513266321","accessRights":0}]

我需要提取 "url" 的值。

我试过像这样使用 sed。假设输出在 temp.txt

sed  '/url/,/accessRights/p' temp.txt

也尝试过使用 grep,但无法提取它。

使用 cut 怎么样?

cat temp.txt | cut -d ',' -f3 | cut -d '"' -f4

拳头切割结果

"url":"http://vu.mycdn.me/upload.do?sig=2223a95d7e51832a09d03aa2f23ad3dec0a2c430\u0026expires=1441573849826\u0026clientType=0\u0026id=34802240145\u0026userId=569513266321"

第二个提取'"'字符之间的内容。

结果:

http://vu.mycdn.me/upload.do?sig=2223a95d7e51832a09d03aa2f23ad3dec0a2c430\u0026expires=1441573849826\u0026clientType=0\u0026id=34802240145\u0026userId=569513266321

我建议使用一段Python代码如下:

#!/usr/bin/python
data = [{"fileName":"animated.avi","movieId":"34802240145","url":"http://vu.mycdn.me/upload.do?sig=2223a95d7e51832a09d03aa2f23ad3dec0a2c430\u0026expires=1441573849826\u0026clientType=0\u0026id=34802240145\u0026userId=569513266321","accessRights":0}]
data = data[0]
# if you want to get the next field of 'url', meaning 'accessRights', calling the following one (or the other field)
print data['accessRights']

将其保存到一个文件中,例如,命名为extract.py。然后,在终端输入:

user@linux>extract > temp.txt

结果放入文件temp.txt。在此示例中,0 是返回值。