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

zdwk9cvp  于 2023-08-03  发布在  Linux
关注(0)|答案(3)|浏览(121)

我有一个脚本的输出,它看起来像这样

[{"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,但无法提取它。

ctrmrzij

ctrmrzij1#

如何使用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

ubbxdtey

ubbxdtey2#

我建议使用一段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是返回值。

ulmd4ohb

ulmd4ohb3#

我知道我迟到了,所以这更多的是为了其他搜索者的未来参考。
看起来你正在尝试处理JSON文件。您可能会发现使用专用工具比使用通用工具更容易解析。我建议jq
您的特定问题可以通过以下方式解决:第一个月
使用专用工具的好处是,通常比通用文本处理工具更易读和健壮。同样,即使你的源代码的格式有微小的变化(例如,他们添加了另一个字段),jq代码应该可以继续工作,而使用通用工具编码可能需要大量的返工。

相关问题