使用grep从本地文件中的HTML标记内部获取文本

时间:2010-08-29 01:01:26

标签: html regex bash screen-scraping grep

  

可能重复:
  RegEx match open tags except XHTML self-contained tags

摘自输入文件

<TD class="clsTDLabelWeb" width="28%">Municipality:&nbsp;</TD>
<TD style="WIDTH: 394px" class="clsTDLabelSm" colSpan="5">
<span id="DInfo1_Municipality">JUPITER</span></TD>

我的正则表达式

(?<=<span id="DInfo1_Municipality">)([^</span>]*)

我有一个HTML文件保存到磁盘。 我想使用grep搜索文件并输出特定范围的内容,但我不知道这是否正确使用了grep。当我在文件上运行grep时,表达式从另一个文件读取(所以我不会弄乱任何特殊字符),它不会输出任何内容。我在RegExr中测试了表达式,它匹配“JUPITER”,这正是我想要的返回。非常感谢你的帮助!

期望输出

JUPITER

3 个答案:

答案 0 :(得分:3)

尝试一下:

sed -n 's|^<span id="DInfo1_Municipality">\([^<]*\)</span></TD>$|\1|p' file

或使用GNU grep和你的正则表达式:

grep -Po '(?<=<span id="DInfo1_Municipality">)([^</span>]*)'

答案 1 :(得分:1)

Grep不支持那种类型的正则表达式(lookbehind断言),并且它是一个非常糟糕的工具,但是对于给定它可行的示例,将在许多情况下中断。

grep -io "<span id=\"DInfo1_Municipality\">.*</span>" file.htlm | grep -io ">[^<]*" | grep -io [^>]*
像那样疯狂的事情,不是一个好主意。

答案 2 :(得分:1)

sed -n '/DInfo1_Municipality/s/<\/span.*//p' file | sed 's/.*>//'