使用 sed 清空 HTML 标签

使用 sed 清空 HTML 标签

我想清空每个 HTML 标签的内容,但是“保持结构”

从:

<h5>Holdrs <div class="tooltip" data-tooltip="Accounts with ..."></div></h5>
<div class="value">
  <span class="amount">25,241</span><a class="smallnav" href="/c/token/0xB31f66AA3C1e785363F0875A1B7"><svg class="icon-s icon">

我想要得到:

<>Holdrs <><><>
<>
  <>25,241<><><>

根据我对 sed 的理解,这应该是:

sed 's/<.*>/<>/'

但它只返回:

<>
<>
  <>

(在此处测试:https://sed.js.org/?gist=7af9c1c1762a6a93d582502b3d4fe22f)。

我做错了什么?正确的模式是什么?

答案1

*是贪婪的,因此匹配行中<.*>从第一个<到最后一个的所有内容。有些工具将其理解为非贪婪的类似物,>*?*但不是sed

在你的情况下,仍然可以使用sed。将.(任何字符) 替换为[^>](任何字符,但>)。你还应该添加g标志,因为你想替换行中的所有匹配项,而不仅仅是第一个。

这应该有效:

sed 's/<[^>]*>/<>/g'

答案2

只需将所有节点重命名为空字符串并使用删除所有属性xmlstarlet

xml ed -r '//*' '' -d '//@*'

这将添加一个 XML 标头 ( <?xml version="1.0"?>) 并在结束标记 ( </>) 中留下一个斜线,这可能是可以接受的,或者您可以使用额外的tail/sed传递将其删除。

正如其他人已经说过的,sed单靠自己永远无法正确处理所有情况。

相关内容