Как я могу легко конвертировать специальные объекты HTML из стандартного потока ввода в Linux?


9

CentOS

Есть ли простой способ конвертировать специальные объекты HTML из потока данных? Я передаю данные в скрипт bash, и иногда эти данные включают в себя специальные объекты. Например:

"тест" & amp; тест $ тест! test @ # $% ^ & amp; *

Я не уверен, почему некоторые персонажи появляются нормально, а другие нет, но, к сожалению, я не контролирую поступающие данные.

Я думаю, что я мог бы использовать SED здесь, но кажется, что это будет громоздко и, возможно, склонны к ложным срабатываниям. Есть ли команда Linux, к которой я мог бы обратиться, которая специализируется на декодировании данных этого типа?

Ответы:



14

Perl (как всегда) твой друг. Я думаю, что это сделает это:

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

Например:

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

С выходом:

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

Это работает на моем ноутбуке OSX10.8 и хосте RHEL5.
Джейсон Тан

Чтобы вывести файл в формате UTF-8, используйте binmode: echo "& laquo;" | perl -n -mHTML :: Entities -mutf8 -e 'binmode (STDOUT, ": utf8"); напечатать HTML :: Entities :: decode_entities ($ _); '
Фальстаф


2

С Python 3:

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

0

Принимает текстовый файл из стандартного ввода:

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

Вероятно, нужно bash> = версия 4

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.