Короткий способ избежать HTML в Bash?
В коробке нет Ruby/Python/Perl и т.д.
Только bash
, sed
и awk
.
Можно заменить символы на карту, но это становится утомительным.
Возможно, какая-то встроенная функциональность, о которой я не знаю?
Ответы
Ответ 1
Экранирование HTML действительно просто связано с заменой трех символов: <
, >
и &
. Для дополнительных точек вы также можете заменить "
и '
. Итак, это не длинный sed
script:
sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'
Ответ 2
Вы можете использовать утилиту recode
:
echo 'He said: "Not sure that - 2<1"' | recode ascii..html
Вывод:
He said: "Not sure that - 2<1"
Ответ 3
Чистый bash, без внешних программ:
function htmlEscape () {
s=${1//&/&}
s=${s//</<}
s=${s//>/>}
s=${s//'"'/"}
echo $s
}
Простая подстановка строк.
Ответ 4
или используйте специальные XML-символы xmlstar Escape/Unescape:
$ echo '<abc&def>'| xml esc
<abc&def>
Ответ 5
Предыдущая замена sed портит действительный вывод, например
<
в
&lt;
Добавление отрицательной обратной связи, так что "&" изменяется только на "& amp;" если после этого "&" еще не стоит "amp;" исправляет это:
sed 's/&(?!amp;)/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'