使用 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: </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文件后浏览器的显示内容却不进行相应改变?