我需要一种方法来将
!
等 HTML ASCII 代码替换为 Bash 中的正确字符。
是否有一个实用程序可以运行我的输出来执行此操作,或者类似的操作?
$ 回显'!' | 重新编码 html/.. ! $ echo '<∞>' |重新编码 html/.. <∞>
我不知道有什么简单的方法,这就是我想我会做的......
您可以编写浏览器脚本来读取文件,然后将其另存为文本。如果 lynx 支持 html 字符实体,那么它可能值得研究。如果这不起作用...
此类问题的一般解决方案是使用 sed 完成的。为此,您需要进行“更高阶”编辑,因为您首先从实体表开始,然后通过多步骤过程将该表编辑为编辑脚本本身。比如:
. . .
s/&Dagger;/‡/g<br />
s/&#8221;/”/g<br />
. . .
然后,将其封装为 html,将其读入浏览器,并将其保存为目标字符集中的文本。如果你让它产生如下行:
s/</</g
那么你就赢了。调用
sed
或 ex
的 bash 脚本可以由文件中的替代命令驱动。
这是我使用标准 Linux 工具箱的解决方案。
$ foo="This is a line feed
And e acute:é with a grinning face 😀."
$ echo "$foo"
This is a line feed
And e acute:é with a grinning face 😀.
$ eval "$(printf '%s' "$foo" | sed 's/^/printf "/;s/�*\([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。