O PHP é bem adequado para isso. Este exemplo requer o PHP 5:
cat file.html | php -R 'echo html_entity_decode($argn);'
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?
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 @ # $ % ^ & *
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
Com o Python 3:
python3 -c 'import html,sys; print(html.unescape(sys.stdin.read()), end="")' < file.html
Obtém o arquivo de texto de stdin:
#!/bin/bash
#
while read lin; do
newl=${lin//>/>}
newl=${newl//</<}
newl=${newl//&/<}
# ...other entites
echo "$newl"
done
Provavelmente precisa de bash > = versão 4