eu quero extrair o valor da tag html usando sed

0

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?

    
por user173787 06.06.2016 / 16:04

3 respostas

1

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
    
por 08.06.2016 / 00:38
0

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

    
por 06.06.2016 / 17:02
0

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 .

    
por 07.06.2016 / 12:15

Tags