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

标签 linux bash unicode char tr

我有下一个问题;

$ 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

关于linux - 当我使用特殊字符时,为什么 tr 给我双字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901221/

相关文章:

bash - 将 sed 反向引用传递给 base64 命令

bash - bash 脚本如何受到 bash4 版本的影响?

Linux 按属性对文件进行分组和计数

c - snd_pcm_writei 延迟后不工作

python-3.x - 使用命令 "ls -t | tail -n +4 | xargs rm --"删除另一个位置的文件

linux - 如何检查字符串是否包含子字符串并且 Bash 中不包含子字符串

c - 如何在 Visual Studio 2013 中将 stdint 类型与 _tprintf 一起使用?

python - 如何解决 Python 3.6 中的 UnicodeDecodeError?

oracle - SSIS 将 Varchar2 转换为 DT_STR

Java:在 Debian 服务器上重新启动 Java 进程