HTML özel varlıklarını Linux'ta standart bir giriş akışından nasıl kolayca dönüştürebilirim?


9

CentOS

HTML özel varlıklarını bir veri akışından dönüştürmenin kolay bir yolu var mı? Bir bash betiğine veri aktarıyorum ve bazen bu veriler özel varlıkları içeriyor. Örneğin:

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

Neden bazı karakterlerin iyi göründüğünden emin değilim, ama diğerleri değil ama ne yazık ki, gelen veriler üzerinde kontrolüm yok.

SED'i burada kullanabileceğimi düşünüyorum ama bu hantal ve muhtemelen yanlış pozitiflere eğilimli gibi görünüyor. Bu tür verilerin kodunu çözmede uzmanlaşmış bir Linux komutu var mı?

Yanıtlar:


9

PHP buna çok uygundur. Bu örnek PHP 5 gerektirir:

cat file.html | php -R 'echo html_entity_decode($argn);'

14

Perl (her zamanki gibi) senin arkadaşın. Bunun yapacağını düşünüyorum:

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

Örneğin:

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

Çıktı ile:

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

Bu, OSX10.8 dizüstü bilgisayarımda ve bir RHEL5.something ana bilgisayarında çalışır.
Jason Tan

Dosyanın UTF-8 biçiminde çıktısını almak için binmode: echo "& laquo;" | perl -n -mHTML :: Varlıklar -mutf8 -e 'binmode (STDOUT, ": utf8"); HTML'yi yazdır :: Varlıklar :: decode_entities ($ _); '
falstaff

6

recode , ana GNU / Linux dağıtımlarının varsayılan paket havuzlarında kullanılabilir. HTML varlıklarını UTF-8'e çözmek için:

…|recode html..utf8

2

Python 3 ile:

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

0

Metin dosyasını stdin'den alır:

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

Muhtemelen bash> = sürüm 4'e ihtiyaç duyar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.