私はこれを変える方法を探しています:
hello < world
これに:
hello < world
Sedを使用できますが、不可解な正規表現を使用せずにこれを実現するにはどうすればよいですか?
recode ( アーカイブされたページ ; GitHubミラー ; Debianページ ):
$ echo '<' |recode html..ascii
<
Linuxおよび同様のUnix-yシステムにインストールします。
$ Sudo apt-get install recode
以下を使用してMac OSにインストールします。
$ brew install recode
Perlの場合:
cat foo.html | Perl -MHTML::Entities -pe 'decode_entities($_);'
コマンドラインからphpを使用する場合:
cat foo.html | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);'
別の方法は、次のようなWebブラウザを介してパイプすることです。
echo '!' | w3m -dump -T text/html
これは、ディストリビューションのダウンロードとインストールが困難なcygwinでうまく機能しました。
この答えが見つかりました here
Xmlstarletの使用:
echo 'hello < world' | xmlstarlet unesc
BashでHTMLをエスケープする簡単な方法? これは、Stack Exchangeで(wget
を使用して)回答を取得し、HTMLを通常のASCII文字:
sed 's/ / /g; s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/#'/\'"'"'/g; s/“/\"/g; s/”/\"/g;'
編集1:2017年4月7日-左二重引用符と右二重引用符の変換を追加しました。これは、bashスクリプトの一部であり、SEの回答をWebスクレイピングし、ここでローカルコードファイルと比較します。 buntuに質問-ローカルファイル間のコードバージョン管理とUbuntuの質問に回答
sed
を使用すると、HTMLをAsk Ubuntu/Stack Exchangeの1K行ファイルでASCIIに変換するのに約3秒かかりました。約1秒の応答時間で置き換えます。
関数は次のとおりです。
#-------------------------------------------------------------------------------
LineOut="" # Make global
HTMLtoText () {
LineOut=$1 # Parm 1= Input line
# Replace external command: Line=$(sed 's/&/\&/g; s/</\</g;
# s/>/\>/g; s/"/\"/g; s/'/\'"'"'/g; s/“/\"/g;
# s/”/\"/g;' <<< "$Line") -- With faster builtin commands.
LineOut="${LineOut// / }"
LineOut="${LineOut//&/&}"
LineOut="${LineOut//</<}"
LineOut="${LineOut//>/>}"
LineOut="${LineOut//"/'"'}"
LineOut="${LineOut//'/"'"}"
LineOut="${LineOut//“/'"'}" # TODO: ASCII/ISO for opening quote
LineOut="${LineOut//”/'"'}" # TODO: ASCII/ISO for closing quote
} # HTMLtoText ()
A python 3.2+バージョン:
cat foo.html | python3 -c 'import html, sys; [print(html.unescape(l), end="") for l in sys.stdin]'