Linuxの標準入力ストリームからHTML特殊エンティティを簡単に変換するにはどうすればよいですか?


9

CentOS

データストリームからHTMLの特殊なエンティティを変換する簡単な方法はありますか?データをbashスクリプトに渡していますが、そのデータには特別なエンティティが含まれている場合があります。例えば:

「テスト」& テスト$ test!テスト@#$%^& *

一部の文字がうまく表示され、他の文字が表示されない理由はわかりませんが、残念ながら、受信するデータを制御できません。

私はここで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.somethingホストで動作します。
Jason Tan、

ファイルをUTF-8で出力するには、binmodeを使用します。echo "«" | perl -n -mHTML :: Entities -mutf8 -e 'binmode(STDOUT、 ":utf8"); print HTML :: Entities :: decode_entities($ _); '
ファルスタッフ2013年

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が必要です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.