Você pode usar html2
como "pré-processador" para sed:
$ html2 <file 2>/dev/null | sed '/td=/!d;s/^.*td=//'
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN
Eu quero extrair o valor da tag html usando sed
arquivo:
<td class=xl7128074></td>
<td class=xl7128074></td>
<td class=xl7128074></td>
</tr>
<tr height=21 style='height:15.75pt'>
<td height=21 class=xl8428074 style='height:15.75pt;border-top:none'>ANT</td>
<td class=xl10028074 style='border-top:none;border-left:none'>$interoprfbcheck_prodconnectorstatus_ANT</td>
<td class=xl8228074>ANT</td>
<!-- This is set by Python -->
<td class=xl155577 style='border-left:none;font-size:11.0pt;color:#006100;
font-weight:400;text-decoration:none;text-underline-style:none;text-line-through:
none;font-family:Arial;border-top:none;border-right:1.0pt solid windowtext;
border-bottom:1.0pt solid windowtext;border-left:1.0pt solid windowtext;
background:#E6EFCE;mso-pattern:black none'>
GREEN</td>
<td class=xl7128074></td>
<td class=xl7128074></td>
<td class=xl7128074></td>
Eu quero o resultado esperado:
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN
Eu estava usando sed -n 's/<td.*>\(.*\)<\/td>//p' filename.html
e ficando abaixo do resultado:
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
o GEEEN não vem, acho que por não estar na mesma linha, Existe alguma coisa que podemos adicionar para obter o resultado da próxima linha também?
Você pode usar html2
como "pré-processador" para sed:
$ html2 <file 2>/dev/null | sed '/td=/!d;s/^.*td=//'
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN
GREEN
não está chegando, pois é colocado pelo gerador em uma linha separada, portanto, o script sed
não encontra uma correspondência. Sem arranjos especiais sed
puxa o fluxo de entrada para o espaço de jogo linha por linha.
Portanto, você precisa inserir novas linhas no espaço de correspondência com o comando N
até fechar </tr>
, depois armazenar uma cópia do espaço padrão em um espaço de espera, remover a tag principal <tr ...>
e remover tudo começando de </tr>
até o final do espaço de jogo e imprimi-lo.
Depois disso, você precisa substituir o espaço de correspondência pelo conteúdo do espaço de espera, remover a parte já impressa e começar tudo de novo procurando a tag <tr ...>
inicial.
veja info sed
para detalhes
A amostra HTML que você publicou não é XML válida por vários motivos. Se isso fosse corrigido, você poderia usar isto:
xmlstarlet sel -t -v '//td[text()]' input.html
O resultado não é exatamente o esperado, pois o texto do último td
não vazio não é GREEN
, mas \nGREEN
.
Tags sed