Je cherche un moyen de transformer cela:
hello < world
pour ça:
hello < world
Je pourrais utiliser sed, mais comment cela peut-il être accompli sans utiliser d'expression régulière cryptique?
Essayez recoder ( page archivée ; miroir GitHub ; page Debian ):
$ echo '<' |recode html..ascii
<
Installez sur Linux et les systèmes Unix-y similaires:
$ Sudo apt-get install recode
Installez sur Mac OS en utilisant:
$ brew install recode
Avec Perl:
cat foo.html | Perl -MHTML::Entities -pe 'decode_entities($_);'
Avec php depuis la ligne de commande:
cat foo.html | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);'
Une alternative consiste à passer par un navigateur Web, tel que:
echo '!' | w3m -dump -T text/html
Cela a très bien fonctionné pour moi à cygwin, où le téléchargement et l'installation des distributions sont difficiles.
Cette réponse a été trouvée ici
Utilisation de xmlstarlet:
echo 'hello < world' | xmlstarlet unesc
Cette réponse est basée sur: n moyen court pour échapper au HTML dans Bash? qui fonctionne très bien pour récupérer les réponses (en utilisant wget
) sur Stack Exchange et convertir le HTML en normal ASCII caractères:
sed 's/ / /g; s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/#'/\'"'"'/g; s/“/\"/g; s/”/\"/g;'
Édition 1: 7 avril 2017 - Ajout d'une conversion de guillemet double gauche et de guillemet double droit. Cela fait partie du script bash qui gratte les réponses SE sur le Web et les compare aux fichiers de code locaux ici: Ask Ubuntu - Code Version Control entre les fichiers locaux et Ask Ubuntu answers
L'utilisation de sed
prenait environ 3 secondes pour convertir le HTML en ASCII sur un fichier de ligne de 1 Ko à partir de Ask Ubuntu/Stack Exchange. En tant que tel, j'ai été obligé d'utiliser la recherche intégrée de Bash et remplacer pendant ~ 1 seconde de temps de réponse.
Voici la fonction:
#-------------------------------------------------------------------------------
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 ()
Une version python 3.2+:
cat foo.html | python3 -c 'import html, sys; [print(html.unescape(l), end="") for l in sys.stdin]'