我想清空每个 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 )。
我做错了什么?什么是正确的模式?
*
是贪心的,所以<.*>
匹配从第一个<
到最后一个>
的所有内容。一些工具理解*?
为 的非贪婪模拟*
,但不是sed
.在您的情况下,仍然可以使用
sed
. 将.
(任何字符)替换为([^>]
除 之外的任何字符>
)。您还应该添加g
标志,因为您想替换该行中的所有匹配项,而不仅仅是第一个。这应该有效:
只需将所有节点重命名为空字符串并使用以下命令删除所有属性
xmlstarlet
:这将添加一个 XML 标头 (
<?xml version="1.0"?>
) 并在结束标记 (</>
) 中留下一个斜线,这可能是可以接受的,或者您可以通过附加tail
/sed
将其删除。就像其他人已经说过的那样,
sed
独自一人永远无法正确处理所有案件。