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


9

CentOS

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

"teste" & amp; test $ test! teste @ # $% ^ & amp; *

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

Acho que posso usar o SED aqui, mas isso parece complicado e possivelmente propenso a falsos positivos. Existe um comando do Linux para o qual eu possa canalizar que é especializado em decodificar esse tipo de dados?

Respostas:


9

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

cat file.html | php -R 'echo html_entity_decode($argn);'

14

Perl é (como sempre) seu amigo. Eu acho que isso fará 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 @ # $ % ^ & *

Isso funciona no meu laptop OSX10.8 e no host RHEL5.something.
Jason Tan

Para gerar o arquivo em UTF-8, use binmode: echo "& laquo;" | perl -n -mHTML :: Entities -mutf8 -e 'binmode (STDOUT, ": utf8"); print HTML :: Entities :: decode_entities ($ _); '
falstaff

6

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

…|recode html..utf8

2

Com o Python 3:

python3 -c 'import html,sys; print(html.unescape(sys.stdin.read()), end="")' < file.html

0

Retorna o arquivo de texto do stdin:

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

Provavelmente precisa do bash> = versão 4

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.