我有以下命令用Unicode替换Unicode字符。
sed -i 's/Ã/A/g'
问题是我的Unix环境中的sed命令无法识别Ã
所以我假设你用它的十六进制值替换它。如果我使用C3
代替语法会是什么样的?
我正在使用此命令作为其他字符的模板,我想用空格替换,例如:
sed -i's /©/ / g'
答案 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