如何删除标记后的文本

如何删除标记后的文本

我有一段 html 代码,我尝试提取其中的第一段。

html 是这样的:

<p>
    Hi. Lorem Ipsum<br />
    dolor si amet […]
</p>
<p>…</p>
<p>…</p>

我首先想到的是使用sed 's/<\/p>*/<\/p>'但它似乎不起作用:它什么也不做

任何想法 ?

答案1

这应该可以正常工作。它使用字符串操作,而不是正则表达式。它还应该处理打开和关闭 P 标签在同一行的情况。

awk '
  !in_p && idx = index($0,"<p>") {
    in_p = 1
    $0 = substr($0,idx+4)
  }
  in_p && idx = index($0, "</p>") {
    seen_close = 1
    $0 = substr($0,0,idx-1)
  }
  in_p {print}
  seen_close {exit}
' file.html

如果您有嵌套段落,则不会按预期工作

<p>
    Hi. Lorem Ipsum<br />
    dolor si amet […]
    <p>
    </p>
</p>
<p>2nd paragraph</p>

XML/HTML 手动解析起来非常麻烦:请使用 HTML 解析器。

相关内容