当我使用特殊字符时,为什么 tr 给我双字符?
Why tr gives me double char, when I use special characters?
我有下一个问题;
$ echo ača | tr 'č' 'c'
$ acca
为什么它给 mi 加倍 "c"?如何解决?我想要 aca
,而不是 acca
。
č
在 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
我有下一个问题;
$ echo ača | tr 'č' 'c'
$ acca
为什么它给 mi 加倍 "c"?如何解决?我想要 aca
,而不是 acca
。
č
在 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