2

我需要从 youtube 的 index.html 中提取视频名称。我已经能够将文件分成小块,每个小块都包含一个视频列表,但是我似乎无法提取视频标题。我的教授提供了以下命令,但是在这种情况下我似乎无法让它工作。

number=`expr "$s" : ".*\/\([0-9,]*\)\/"`; echo $number # will print 250,4211

虽然我不完全确定,但我认为我无法让这种方法发挥作用,因为视频标题和周围文本之间没有空格。这是我需要从中提取标题的示例:

<li class="video-list-item "><a href="/watch?v=9BbgvlgDQMg&amp;feature=g-sptl&amp;cid=inp-hs-edt" class="video-list-item-link yt-uix-sessionlink" data-sessionlink="ei=CMzmroaB5bICFRiXIQoda3kX5g%3D%3D&amp;feature=g-sptl%26cid%3Dinp-hs-edt" ><span class="ux-thumb-wrap contains-addto "><span class="video-thumb ux-thumb yt-thumb-default-120 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img src="http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin" data-thumb="//i2.ytimg.com/vi/9BbgvlgDQMg/default.jpg" width="120" ><span class="vertical-align"></span></span></span></span><span class="video-time">3:51</span>

在这段文字中,我需要提取“ Lil' Buck "Golden Gateway" Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin ",不带引号。

4

2 回答 2

1

您可以使用 bash 正则表达式\<img.*alt=\"([^\"]*)\"从 img 元素中提取替代文本。

例子:

$ cat file
<li class="video-list-item "><a href="/watch?v=9BbgvlgDQMg&amp;feature=g-sptl&amp;cid=inp-hs-edt" class="video-list-item-link yt-uix-sessionlink" data-sessionlink="ei=CMzmroaB5bICFRiXIQoda3kX5g%3D%3D&amp;feature=g-sptl%26cid%3Dinp-hs-edt" ><span class="ux-thumb-wrap contains-addto "><span class="video-thumb ux-thumb yt-thumb-default-120 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img src="http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin" data-thumb="//i2.ytimg.com/vi/9BbgvlgDQMg/default.jpg" width="120" ><span class="vertical-align"></span></span></span></span><span class="video-time">3:51</span>

$ line="$(cat file)"

$ if [[ "$line" =~ \<img.*alt=\"([^\"]*)\" ]]
then
  echo "${BASH_REMATCH[1]}"
fi
Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin

更新:

使用expr

$ expr "$line" : '.*<img.*alt=\"\([^\"]*\)\".*'
Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin
于 2012-10-03T14:37:37.393 回答
0

我想在你的作业中使用正则表达式是强制性的......如果不是我会去一个 xml 解析器......

但是,如果是,我建议您与Reg Ex buddy一起尝试

RegexBuddy 让您比以往任何时候都更轻松地创建正则表达式来满足您的需求,而无需任何猜测。尽管如此,您仍需要测试您的正则表达式模式以 100% 确保它们与您想要的匹配,并且不匹配您不想要的。

于 2012-10-03T14:28:03.893 回答