我需要一种方法来替换像!
这样的HTML ASCII码,并在bash中使用正确的字符。
是否有一个实用程序我可以运行我的输出来执行此操作,或者沿着这些行的某些内容?
答案 0 :(得分:6)
$ echo '!' | recode html/.. ! $ echo '<∞>' | recode html/.. <∞>
答案 1 :(得分:2)
这是我使用标准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 .
你看它适用于所有类型的转义,甚至换行,急性(é)是一个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/&Dagger;/‡/g<br />
s/&#8221;/”/g<br />
. . .
然后,将其封装为html,将其读入浏览器,并将其另存为您要定位的字符集中的文本。如果你得到它来产生如下行:
s/</</g
然后你赢了。调用sed
或ex
的bash脚本可以由文件中的替换命令驱动。