当我使用特殊字符时,为什么tr给了我双重字符?

时间:2016-04-27 21:26:31

标签: linux bash unicode char tr

我有下一个问题;

$ echo ača | tr 'č' 'c'
$ acca

为什么它给了mi double" c" ?怎么解决?我想要aca,而不是acca

1 个答案:

答案 0 :(得分:4)

č在unicode中长度为两个字节:

charinfo č
U+010D LATIN SMALL LETTER C HACEK [Ll]

tr会将其视为每个字节的两个字符。然后它将扩展第二个参数,直到所有字符都被替换,因此两个c。。

你可以使用sed(可能只是GNU):

echo ača | sed 'y/č/c/'

或Perl:

echo ača | perl -pe 'use open qw(:std :utf8);use utf8;y/č/c/'

考虑一下这可能会让你了解正在发生的事情:

% echo abc | tr 'abc' 'de'
dee