Làm cách nào tôi có thể dễ dàng chuyển đổi các thực thể đặc biệt HTML từ luồng đầu vào tiêu chuẩn trong Linux?


9

CentOS

Có cách nào dễ dàng để chuyển đổi các thực thể đặc biệt HTML từ luồng dữ liệu không? Tôi đang chuyển dữ liệu tới tập lệnh bash và đôi khi dữ liệu đó bao gồm các thực thể đặc biệt. Ví dụ:

"kiểm tra" & amp; kiểm tra $ kiểm tra! kiểm tra @ # $% ^ & amp; *

Tôi không chắc tại sao một số nhân vật xuất hiện tốt và những người khác thì không, nhưng thật không may, tôi không có quyền kiểm soát dữ liệu đến.

Tôi nghĩ rằng tôi có thể sử dụng SED ở đây nhưng có vẻ như nó sẽ cồng kềnh và có thể dễ bị sai. Có một lệnh Linux nào tôi có thể chuyển sang chuyên giải mã loại dữ liệu này không?

Câu trả lời:


9

PHP rất phù hợp với điều này. Ví dụ này yêu cầu PHP 5:

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

14

Perl là (như mọi khi) bạn của bạn. Tôi nghĩ rằng điều này sẽ làm điều đó:

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

Ví dụ:

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

Với đầu ra:

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

Điều này hoạt động trên máy tính xách tay OSX10.8 của tôi và máy chủ lưu trữ RHEL5.
Jason Tan

Để xuất tệp trong UTF-8, hãy sử dụng binmode: echo "& laquo;" | perl -n -mHTML :: Thực thể -mutf8 -e 'binmode (STDOUT, ": utf8"); in HTML :: Thực thể :: decode_entities ($ _); '
falstaff

6

recode dường như có sẵn trên các gói mặc định của các bản phân phối GNU / Linux chính. Ví dụ: để giải mã các thực thể HTML thành UTF-8:

…|recode html..utf8

2

Với Python 3:

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

0

Lấy tệp văn bản từ stdin:

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

Có lẽ nó cần bash> = phiên bản 4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.