Замена HTML-кодов ascii с помощью bash-скрипта? - PullRequest
4 голосов
/ 14 февраля 2010

Мне нужен способ заменить HTML-коды ASCII, такие как !, на их правильный символ в bash.

Есть ли утилита, через которую я мог бы выполнить вывод, или что-то в этом роде?

Ответы [ 3 ]

6 голосов
/ 14 февраля 2010
$ echo '&#33;' | <a href="http://www.gnu.org/software/recode/" rel="noreferrer">recode</a> html/..
!
$ echo '&lt;&infin;&gt;' | recode html/..
<&infin;>
2 голосов
/ 30 сентября 2015

Вот мое решение со стандартным набором инструментов Linux.

$ foo="This is a line feed&#010;And e acute:&#233; with a grinning face &#128512;."
$ echo "$foo"
This is a line feed&#010;And e acute:&#233; with a grinning face &#128512;.
$ eval "$(printf '%s' "$foo" | sed 's/^/printf "/;s/&#0*\([0-9]*\);/\$( [ \1 -lt 128 ] \&\& printf "\\\\$( printf \"%.3o\\201\" \1)" || \$(which printf) \\\\U\$( printf \"%.8x\" \1) )/g;s/$/\\n"/')" | sed "s/$(printf '\201')//g"
This is a line feed
And e acute:é with a grinning face ?.

Вы видите, что он работает для всех видов экранированных символов, даже для перевода строки, e острый (é), который является 2-байтовым UTF-8, и даже для новых смайликов, которые находятся в расширенной плоскости (4-байтовый юникод).

Эта команда работает ТАКЖЕ с дефисом, который представляет собой обрезанную оболочку (оболочка по умолчанию в Ubuntu), а также совместим с панелью bash и оболочками, подобными пеплу, используемому Synology.

Если вы не против использовать bash и отказаться от совместимости, вы можете сделать это намного проще.

Используемые биты должны быть в любом приличном Linux-боксе (или OS X?) - который - printf (GNU и встроенный) - GNU sed - eval (встроенная оболочка)

В версии только для bash не требуется ни GNU printf.

1 голос
/ 14 февраля 2010

Я не знаю простого пути, вот что, я полагаю, я бы сделал ...

Возможно, вы сможете настроить браузер на чтение файла и его сохранение в виде текста. Если lynx поддерживает символьные объекты html, возможно, стоит поискать. Если это не сработает ...

Общее решение для чего-то подобного сделано с помощью sed . Для этого вам понадобится редактирование «более высокого порядка», так как вы сначала начнете с таблицы сущностей , а затем отредактируете эту таблицу в самом скрипте редактирования с помощью многошаговой процедуры. Что-то вроде:

. . .
s/&amp;Dagger;/&Dagger;/g<br />
s/&amp;#8221;/&#8221;/g<br />
. . .

Затем инкапсулируйте это как html, прочитайте его в браузере и сохраните как текст в наборе символов, на который вы нацелены. Если вы получаете его для производства строк, таких как:

s/&lt;/</g

тогда вы выиграете. Сценарий bash, который вызывает sed или ex, может быть запущен командами замены в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...