我不知道如何在 bash 中提取字符串



我正在尝试制作一个bash脚本,该脚本将下载youtube页面,查看最新视频并找到其url。我有下载页面的部分,除了我不知道如何用url隔离文本。我有这个下载页面

curl -s https://www.youtube.com/user/h3h3Productions/videos > YoutubePage.txt

它将把它保存到一个文件中。但我不知道如何隔离div的单个部分。div是

<a class="yt-uix-sessionlink yt-uix-tile-link  spf-link  yt-ui-ellipsis yt-ui-ellipsis-2" dir="ltr" title="Why I'm Unlisting the Leafyishere Rant" aria-describedby="description-id-877692" data-sessionlink="ei=a2lSV9zEI9PJ-wODjKuICg&amp;feature=c4-videos-u&amp;ved=CD4QvxsiEwicpteI1I3NAhXT5H4KHQPGCqEomxw" href="/watch?v=q6TNODqcHWA">Why I'm Unlisting the Leafyishere Rant</a>

最后我需要隔离href,但我不知道如何使用grep或sed来实现这一点。

使用sed:

sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="([^"]*)".*/1/p'  YoutubePage.txt

仅提取视频ahref:

$ sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="(/watch?[^"]*)".*/1/p' YoutubePage.txt
/watch?v=q6TNODqcHWA
/watch?v=q6TNODqcHWA
/watch?v=ix4mTekl3MM
/watch?v=ix4mTekl3MM
/watch?v=fEGVOysbC8w
/watch?v=fEGVOysbC8w
...

省略重复行:

$ sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="(/watch?[^"]*)".*/1/p' YoutubePage.txt | sort | uniq
/watch?v=2QOx7vmjV2E
/watch?v=4UNLhoePqqQ
/watch?v=5IoTGVeqwjw
/watch?v=8qwxYaZhUGA
/watch?v=AemSBOsfhc0
/watch?v=CrKkjXMYFzs
...

您也可以通过管道将其发送到curl命令:

curl -s https://www.youtube.com/user/h3h3Productions/videos | sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="(/watch?[^"]*)".*/1/p' | sort | uniq

您可以使用lynx,这是一个终端浏览器,但有一个-dump模式,它将输出HTML解析的文本,并提取URL。这样可以更容易地对URL:进行grep

lynx -dump 'https://www.youtube.com/user/h3h3Productions/videos' 
| sed -n '//watch?/s/^ *[0-9]*. *//p'

这将输出类似于:

https://www.youtube.com/watch?v=EBbLPnQ-CEw
https://www.youtube.com/watch?v=2QOx7vmjV2E
...

细分:

-n '                             # Disable auto printing
//watch?/                   # Match lines with /watch?
s/^ *[0-9]*. *//  # Remove leading index: " 123. https://..." -> 
# "https://..."
p # Print line if all the above have not failed.
'

相关内容

  • 没有找到相关文章

最新更新