Windows - 如何grep(或findstr)html文件并显示第一个匹配的表达式

时间:2013-06-17 15:13:56

标签: html grep findstr

使用grep或findstr我想通过它的真实姓名搜索特定的电影时获得正确的IMDB号码。

例如电影“Das Boot”在IMDB上列出,电影号码为tt0082096。

实际上我正在尝试通过搜索机器生成的html文件来grep(或findstr)。

生成的html文件包含以下几个部分:

<div id="statbox"> 
  <span class="uschr2">1. </span> <a href="http://www.imdb.com/title/tt0082096/" class="dublaulink">Das Boot (1981) - IMDb</a> <br>
  <div id="descbox"> 
  www.imdb.com/title/tt0082096/ - Im Cache - Ähnliche Seiten <BR>
  </div>

我正在寻找的字符串是包含电影网址的字符串。在这种情况下,它是:

http://www.imdb.com/title/tt0082096/

字符串格式如下:

http://www.imdb.com/title/tt???????/

哪里'?'代表数字0 ... 9

我的问题是: grep或findstr如何只返回匹配字符串本身的第一个匹配项而不返回包含匹配项的完整行?

非常感谢你的帮助! 最好的问候

2 个答案:

答案 0 :(得分:3)

Windows findstr返回完整的行。您可以使用GNU sed来避免这种情况:

sed -rn "\#http://www.imdb.com/title/tt#s#.*href=\"(.*)\"\s.*#\1#p" file
http://www.imdb.com/title/tt0082096/

此外,您可以使用grep -o

  -o, --only-matching       show only the part of a line matching PATTERN

答案 1 :(得分:2)

使用grep,您可以执行以下操作:

grep -oP '(?<=href=\")[^"]+(?=\")' html.file

这不是解析html文件的理想方式。然而,如果它是一次性的东西,那么你可能可以逃脱它。 ?<=href=\"是搜索的背后。如果上面它返回了很多东西,那么你可以添加哪个是url行唯一的。