【问题标题】:Why tr gives me double char, when I use special characters?当我使用特殊字符时,为什么 tr 给我双字符?
【发布时间】:2016-04-27 21:26:31
【问题描述】:

我有下一个问题;

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

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

【问题讨论】:

    标签: linux bash unicode char tr


    【解决方案1】:

    č 在 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
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多