使用bash从锚标记中获取href值

时间:2014-07-22 03:34:57

标签: html regex bash

这是我解析的HTML

<li id="dl_linux_32">
   <a href="link">Link</a>
</li>
<li id="dl_linux_64">
   <a href="another_link">Another Link</a>
</li>

使用此curl URL 2>&1 | grep -oE 'href="([^"#]+)"' | sed "s/ /%20/g" | cut -f2 -d "="我能够获得所有href的值。但是,我只希望hrefli的锚定值iddl_linux_32等于{{1}}。

有人可以帮我完成正则表达式吗?

4 个答案:

答案 0 :(得分:1)

Perl One-Liner

正则表达式必须检查多行。在这种情况下,Perl单行将很好地工作。

perl -0777 -ne 'print "$&\n" if /<li id="dl_linux_32">\s*<a \Khref="[^"]+"/' yourfile

答案 1 :(得分:0)

通过GNU awk,

$ awk -F'"' -v RS="</li>" '/<li\s*id=\"dl_linux_32\">/{print $4}' file
link

答案 2 :(得分:0)

我正在寻找的正则表达式是dl_linux_32.+href="([^"#]+)"。我在搜索包含一个或多个字符且href

之前的所有dl_linux_32

答案 3 :(得分:0)

如果html是有效的XML,则可以使用包含xpath搜索的工具

echo '<html>
      <li id="dl_linux_32">
         <a href="link">Link</a>
      </li>
      <li id="dl_linux_64">
         <a href="another_link">Another Link</a>
      </li>
      </html>
' | xmlstarlet sel -t -v '//li[@id="dl_linux_32"]/a/@href'
link