如何用ASCII替换Unicode字符

时间:2014-11-21 00:25:59

标签: bash shell unix unicode sed

我有以下命令用Unicode替换Unicode字符。

sed -i 's/Ã/A/g'

问题是我的Unix环境中的sed命令无法识别Ã所以我假设你用它的十六进制值替换它。如果我使用C3代替语法会是什么样的?

我正在使用此命令作为其他字符的模板,我想用空格替换,例如:

sed -i's /©/ / g'

4 个答案:

答案 0 :(得分:9)

可以在" sed"。

中使用十六进制值
echo "Ã" | hexdump -C
00000000  c3 83 0a                                          |...|
00000003

好的,那个字符是两个字节的组合" c3 83"。让我们用单字节" A":

替换它
echo "Ã" |sed 's/\xc3\x83/A/g'
A

说明:\ x表示" sed"接下来是十六进制代码。

答案 1 :(得分:4)

您可以使用iconv:

iconv -f utf-8 -t ascii//translit

答案 2 :(得分:4)

尝试设置LANG=C,然后在Unicode范围内运行它:
echo "hi ☠ there ☠" | LANG=C sed "s/[\x80-\xFF]//g"

答案 3 :(得分:3)

ICU还有uconv

示例:

  • uconv -x "::NFD; [:Nonspacing Mark:] > ; ::NFC;":删除重音
  • uconv -x "::Latin; ::Latin-ASCII;":用于音译拉丁语/ ascii
  • uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;":用于音译拉丁语/ ascii并删除剩余的代码点> 0x7F的
  • ...

echo "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;" 给出:A l'ecole