Як я можу легко конвертувати спеціальні об'єкти HTML зі стандартного потоку введення в Linux?


9

CentOS

Чи є простий спосіб конвертувати спеціальні сути HTML із потоку даних? Я передаю дані до сценарію bash, а іноді ці дані включають спеціальні об'єкти. Наприклад:

"тест" & amp; тест $ тест! тест @ # $% ^ & 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 :: Субстанції -mutf8 -e 'binmode (STDOUT, ": utf8"); print HTML :: Entities :: decode_entities ($ _); '
falstaff

6

recode здається доступним у сховищах пакетів за замовчуванням основних дистрибутивів GNU / Linux. Наприклад, для декодування об’єктів HTML в UTF-8:

…|recode html..utf8

2

З Python 3:

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

0

Бере текстовий файл з stdin:

#!/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.