使用 grep 从本地文件中的 HTML 标记中获取文本 [重复]

Posted

技术标签:

【中文标题】使用 grep 从本地文件中的 HTML 标记中获取文本 [重复]【英文标题】:Getting text from inside an HTML tag within a local file with grep [duplicate] 【发布时间】:2011-04-05 07:42:20 【问题描述】:

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

来自输入文件的摘录

<TD class="clsTDLabelWeb" >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 搜索文件并输出特定 span 的内容,虽然我不知道这是否是 grep 的正确使用。当我使用从另一个文件中读取的表达式对文件运行 grep 时(所以我不会弄乱任何特殊字符的转义),它不会输出任何内容。我已经在 RegExr 中测试了表达式,它与“JUPITER”匹配,这正是我想要返回的。非常感谢您的帮助!

期望的输出

JUPITER

【问题讨论】:

***.com/questions/1732348/… 【参考方案1】:

试试这个:

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

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

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

【讨论】:

将 -P 标志传递给 grep 使我能够进行我所追求的后视/前瞻。感谢您的提示【参考方案2】:
sed -n '/DInfo1_Municipality/s/<\/span.*//p' file | sed 's/.*>//'

【讨论】:

【参考方案3】:

Grep 不支持这种类型的正则表达式(lookbehind assertions),它是一个非常糟糕的工具,但对于给出的示例来说,它是可行的,在许多情况下都会崩溃。

grep -io "<span id=\"DInfo1_Municipality\">.*</span>" file.htlm | grep -io ">[^<]*" | grep -io [^>]*

像这样疯狂的东西,不是一个好主意。

【讨论】:

谢谢。我有一种感觉,我正在尝试做一些 grep 不支持的事情。看来我得做一些实际的编程了。

以上是关于使用 grep 从本地文件中的 HTML 标记中获取文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 webpack 将本地图像加载到 html 中的元标记

如何对多种文件类型使用 grep --include 选项?

为啥本地修改html文件后浏览器的显示内容却不进行相应改变?

如何使用python脚本从网站中废弃数据并以层次结构存储在文件夹中?

Cordova 播放本地音频文件

Hadoop本地运行模式之Grep案例WordCount案例