我有下面的命令来替换Unicode字符与ASCII的。
sed -i 's/Ã/A/g'
字符串问题是Ã在我的Unix环境中不能被sed命令识别,所以我假设你用它的十六进制值来替换它。如果我用C3来代替,语法会是什么样子?我使用此命令作为模板,用于我想用空格替换的其他字符,例如:sed -i 's/©/ /g'
Ã
C3
wwwo4jvm1#
可以在“sed”中使用十六进制值。
echo "Ã" | hexdump -C 00000000 c3 83 0a |...| 00000003
字符串好的,这个字符是两个字节的组合“c3 83”。让我们用一个字节“A”来代替它:
echo "Ã" |sed 's/\xc3\x83/A/g' A
型解释:\x表示“sed”后面跟着一个十六进制代码。
alen0pnh2#
你可以使用iconv:
iconv -f utf-8 -t ascii//translit -o output.txt input.txt
字符串
vsdwdz233#
尝试设置LANG=C,然后在Unicode范围内运行它:echo "hi ☠ there ☠" | LANG=C sed "s/[\x80-\xFF]//g"个
LANG=C
echo "hi ☠ there ☠" | LANG=C sed "s/[\x80-\xFF]//g"
zzoitvuj4#
还有uconv,来自ICU。示例如下:
uconv
uconv -x "::NFD; [:Nonspacing Mark:] > ; ::NFC;"
uconv -x "::Latin; ::Latin-ASCII;"
uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"
echo "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"给出:A l'ecole
echo "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"
A l'ecole
4条答案
按热度按时间wwwo4jvm1#
可以在“sed”中使用十六进制值。
字符串
好的,这个字符是两个字节的组合“c3 83”。让我们用一个字节“A”来代替它:
型
解释:\x表示“sed”后面跟着一个十六进制代码。
alen0pnh2#
你可以使用iconv:
字符串
vsdwdz233#
尝试设置
LANG=C
,然后在Unicode范围内运行它:echo "hi ☠ there ☠" | LANG=C sed "s/[\x80-\xFF]//g"
个zzoitvuj4#
还有
uconv
,来自ICU。示例如下:
uconv -x "::NFD; [:Nonspacing Mark:] > ; ::NFC;"
:删除重音符号uconv -x "::Latin; ::Latin-ASCII;"
:用于音译拉丁语/阿拉伯语uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"
:用于拉丁文/阿拉伯文的音译,并删除剩余的代码点> 0x 7 Fecho "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"
给出:A l'ecole