Linux의 표준 입력 스트림에서 HTML 특수 엔티티를 쉽게 변환하려면 어떻게해야합니까?


9

CentOS

데이터 스트림에서 HTML 특수 엔티티를 변환하는 쉬운 방법이 있습니까? 데이터를 bash 스크립트에 전달하고 때로는 데이터에 특수 엔티티가 포함되어 있습니다. 예를 들면 다음과 같습니다.

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

왜 일부 문자가 잘 표시되고 다른 문자가 잘 표시되는지 잘 모르겠지만 불행히도 들어오는 데이터를 제어 할 수 없습니다.

나는 여기서 SED를 사용할 수 있다고 생각하지만 성 가시고 거짓 긍정 경향이있는 것처럼 보입니다. 이 유형의 데이터 디코딩을 전문으로하는 Linux 명령이 있습니까?

답변:


9

PHP는 이것에 매우 적합합니다. 이 예에는 PHP 5가 필요합니다.

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

14

펄은 (언제나) 친구입니다. 나는 이것이 그렇게 할 것이라고 생각한다.

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 "& laquo;" | perl -n -mHTML :: 엔티티 -mutf8 -e 'binmode (STDOUT, ": utf8"); HTML :: Entities :: decode_entities ($ _); '인쇄
falstaff

6

recode 는 주요 GNU / Linux 배포판의 기본 패키지 저장소에서 사용 가능한 것으로 보입니다. 예를 들어 HTML 엔터티를 UTF-8로 디코딩 :

…|recode html..utf8

2

파이썬 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> = version 4가 필요할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.