Eu quero esvaziar o conteúdo de cada tag HTML, mas "mantendo a estrutura" .
A partir de:
<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">
Eu quero obter:
<>Holdrs <><><>
<>
<>25,241<><><>
Do meu entendimento de sed, isso deve ser:
sed 's/<.*>/<>/'
mas só retorna:
<>
<>
<>
(Testado aqui: https://sed.js.org/?gist=7af9c1c1762a6a93d582502b3d4fe22f ).
O que estou fazendo de errado? Qual é o padrão correto?
*
é ganancioso, portanto,<.*>
corresponde a tudo, do primeiro<
ao último>
da linha. Algumas ferramentas entendem*?
como análogo não ganancioso de*
, mas nãosed
.No seu caso ainda pode ir com
sed
. Substitua.
(qualquer caractere) por[^>]
(qualquer caractere, exceto>
). Você também deve adicionarg
sinalizador porque deseja substituir todas as correspondências na linha, não apenas a primeira.Isso deve funcionar:
Basta renomear todos os nós para strings vazias e excluir todos os atributos usando
xmlstarlet
:Isso adicionará um cabeçalho XML (
<?xml version="1.0"?>
) e deixará uma barra nas tags de fechamento (</>
) que podem ser aceitáveis ou que você pode remover com um adicionaltail
/sed
passe.Como outros já disseram,
sed
sozinho nunca será capaz de tratar todos os casos corretamente.