我有一个 YouTube 订阅的 html 源文件,想要将其中的/user/CHANNELNAME
部分提取到一个单独的文件中。
源文件 ( browser > youtube.com > subscriptions > manage > Ctrl+U
) 将这些信息分为如下几个部分:
"url":"/user/CHANNELNAME","webPageType":"WEB_PAGE_TYPE_CHANNEL","rootVe":3611,"apiUrl":"/youtubei/v1/browse"
我尝试使用 grep -o 来提取该/user/CHANNELNAME
部分,但我的尝试总是违反贪婪的 *。
$ grep -o '/user/.*"' source
grep 匹配的结果:
/用户/CHANNELNAME”,“webPageType”:“WEB_PAGE_TYPE_CHANNEL”,“rootVe”:3611,“apiUrl”:“/youtubei/v1/browse”
或者:
$ grep -o '/user/.*,' source
grep 匹配的结果相同:
/用户/CHANNELNAME”,“webPageType”:“WEB_PAGE_TYPE_CHANNEL”,“rootVe”:3611,“apiUrl”:“/youtubei/v1/browse”
如何让 grep 在第一个"
或,
答案1
您想要的文本似乎在双引号内,如果始终如此,则不要匹配任何字符(.
),而是尝试匹配双引号以外的任何字符:
grep -o '/user/[^"]*' source
反转^
匹配。假设始终有一个逗号,[^",]
如果某些频道名称没有被双引号括起来,则可以使用
如果你只是在寻找 /user/ 之后的部分,你可以使用-P
grep 的开关来删除 /user/ 部分但仍然匹配它:
grep -oP '(?<=/user/)[^",]*' source