通过bash脚本替换HTML ascii代码?

时间:2010-02-14 17:45:32

标签: bash ascii

我需要一种方法来替换像!这样的HTML ASCII码,并在bash中使用正确的字符。

是否有一个实用程序我可以运行我的输出来执行此操作,或者沿着这些行的某些内容?

3 个答案:

答案 0 :(得分:6)

$ echo '!' | recode html/..
!
$ echo '<∞>' | recode html/..
<∞>

答案 1 :(得分:2)

这是我使用标准Linux工具箱的解决方案。

$ foo="This is a line feed&#010;And e acute:&#233; with a grinning face &#128512;."
$ echo "$foo"
This is a line feed&#010;And e acute:&#233; with a grinning face &#128512;.
$ eval "$(printf '%s' "$foo" | sed 's/^/printf "/;s/&#0*\([0-9]*\);/\$( [ \1 -lt 128 ] \&\& printf "\\\\$( printf \"%.3o\\201\" \1)" || \$(which printf) \\\\U\$( printf \"%.8x\" \1) )/g;s/$/\\n"/')" | sed "s/$(printf '\201')//g"
This is a line feed
And e acute:é with a grinning face .

你看它适用于所有类型的转义,甚至换行,急性(é)是一个2字节的UTF-8,甚至是扩展平面中的新表情符号(4字节unicode)。

此命令也适用于破折号,破折号是一个修剪下来的外壳(Ubuntu上的默认外壳),并且还与像Synology使用的灰烬和bash兼容。

如果您不介意坚持使用bash并降低兼容性,那么您可以更简单。

使用的位应该在任何体面的Linux盒子(或OS X?) - 哪一个 - printf(GNU和内置) - GNU sed - eval(shell builtin)

仅bash版本不需要GNU printf。

答案 2 :(得分:1)

我不知道一个简单的方法,这就是我想我会做的......

您可以编写浏览器脚本来读取文件,然后将其另存为文本。如果lynx支持html字符实体,那么它可能值得一试。如果这不成功......

使用sed完成此类问题的一般解决方案。您需要对此进行“更高阶”编辑,因为您首先要使用an entity table,然后使用多步过程将该表编辑为编辑脚本本身。类似的东西:

. . .
s/&amp;Dagger;/&Dagger;/g<br />
s/&amp;#8221;/&#8221;/g<br />
. . .

然后,将其封装为html,将其读入浏览器,并将其另存为您要定位的字符集中的文本。如果你得到它来产生如下行:

s/&lt;/</g
然后你赢了。调用sedex的bash脚本可以由文件中的替换命令驱动。