Como posso converter facilmente entidades especiais de HTML a partir de um fluxo de entrada padrão no Linux?

6

CentOS

Existe uma maneira fácil de converter entidades especiais em HTML de um fluxo de dados? Estou passando dados para um script bash e, às vezes, esses dados incluem entidades especiais. Por exemplo:

"test" & test $test ! test @ # $ % ^ & *

Não sei por que alguns personagens aparecem bem e outros não, mas infelizmente não tenho controle sobre os dados que estão chegando.

Estou pensando que posso usar o SED aqui, mas parece que seria complicado e possivelmente propenso a falsos positivos. Existe um comando Linux que eu poderia canalizar para que se especialize na decodificação deste tipo de dados?

    
por Mike B 22.10.2012 / 04:21

5 respostas

7

O PHP é bem adequado para isso. Este exemplo requer o PHP 5:

cat file.html | php -R 'echo html_entity_decode($argn);'
    
por 22.10.2012 / 04:33
11

Perl é (como sempre) seu amigo. Eu acho que isso vai fazer isso:

perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

Por exemplo:

echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

Com saída:

someguy@somehost ~]$ echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'
"test" & test $test ! test @ # $ % ^ & *
    
por 22.10.2012 / 07:51
3

recode parece disponível nos repositórios de pacotes padrão das principais distribuições GNU / Linux. Por exemplo. decodificar entidades HTML em UTF-8:

…|recode html..utf8
    
por 03.04.2017 / 11:57
1

Com o Python 3:

python3 -c 'import html,sys; print(html.unescape(sys.stdin.read()), end="")' < file.html
    
por 27.03.2018 / 14:59
0

Obtém o arquivo de texto de stdin:

#!/bin/bash
#
while read lin; do
  newl=${lin//&gt;/>}
  newl=${newl//&lt;/<}
  newl=${newl//&amp;/<}
  # ...other entites
  echo "$newl"
done

Provavelmente precisa de bash > = versão 4

    
por 04.10.2013 / 20:42