我想清空每个 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">
Run Code Online (Sandbox Code Playgroud)
我想得到:
<>Holdrs <><><>
<>
<>25,241<><><>
Run Code Online (Sandbox Code Playgroud)
根据我对 sed 的理解,这应该是:
sed 's/<.*>/<>/'
Run Code Online (Sandbox Code Playgroud)
但它只返回:
sed 's/<.*>/<>/'
Run Code Online (Sandbox Code Playgroud)
(在这里测试:https://sed.js.org/? gist=7af9c1c1762a6a93d582502b3d4fe22f)。
我做错了什么?正确的模式是什么?
Kam*_*ski 14
*是贪婪的,所以匹配行中<.*>从第一个<到最后一个的所有内容。>有些工具理解*?为 的非贪婪类似物*,但不是sed。
在你的情况下,人们仍然可以选择sed. 将.(任何字符)替换为[^>](除 之外的任何字符>)。您还应该添加g标志,因为您想要替换行中的所有匹配项,而不仅仅是第一个。
这应该有效:
sed 's/<[^>]*>/<>/g'
Run Code Online (Sandbox Code Playgroud)
只需将所有节点重命名为空字符串并使用以下命令删除所有属性xmlstarlet:
xml ed -r '//*' '' -d '//@*'
Run Code Online (Sandbox Code Playgroud)
这将添加一个 XML 标头 ( <?xml version="1.0"?>) 并在结束标记 ( ) 中留下斜线</>,这可能是可以接受的,或者您可以通过附加tail/sed传递将其删除。
正如其他人已经说过的那样,sed仅凭一己之力永远无法正确处理所有情况。
| 归档时间: |
|
| 查看次数: |
2165 次 |
| 最近记录: |