通过 Bash 脚本替换 HTML ASCII 代码?

问题描述 投票:0回答:3

我需要一种方法来将

!
等 HTML ASCII 代码替换为 Bash 中的正确字符。

是否有一个实用程序可以运行我的输出来执行此操作,或者类似的操作?

bash ascii
3个回答
6
投票
$ 回显'!' | 重新编码 html/..
!
$ echo '<∞>' |重新编码 html/..
<∞>

1
投票

我不知道有什么简单的方法,这就是我想我会做的......

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

此类问题的一般解决方案是使用 sed 完成的。为此,您需要进行“更高阶”编辑,因为您首先从实体表开始,然后通过多步骤过程将该表编辑为编辑脚本本身。比如:

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

然后,将其封装为 html,将其读入浏览器,并将其保存为目标字符集中的文本。如果你让它产生如下行:

s/&lt;/</g

那么你就赢了。调用

sed
ex
的 bash 脚本可以由文件中的替代命令驱动。


1
投票

这是我使用标准 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 😀.

您会发现它适用于各种转义符,甚至是换行符、e 急性 (é)(2 字节 UTF-8),甚至是扩展平面中的新表情符号(4 字节 unicode)。

此命令还可以与 dash 一起使用,dash 是一个精简的 shell(Ubuntu 上的默认 shell),并且还与 bash 和 Synology 使用的 ash 等 shell 兼容。

如果你不介意坚持使用 bash 并放弃兼容性,你可以做得更简单。

使用的位应该在任何像样的 Linux 机器(或 OS X?) - 哪个 - printf(GNU 和内置) -GNU sed - eval(外壳内置)

仅 bash 版本不需要which,也不需要GNU printf。

© www.soinside.com 2019 - 2024. All rights reserved.