【问题标题】:How to change case of UTF file如何更改UTF文件的大小写
【发布时间】:2011-03-17 02:02:17
【问题描述】:

我有大写的 UTF 文件,我想将所有单词更改为小写。

我试过了:

`$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt`

但这只会改变没有重音的字符。

谢谢

【问题讨论】:

  • 也许这属于超级用户?
  • 当然,错了,但我不知道如何移动它。

标签: linux bash text


【解决方案1】:

最后我找到的最简单的方法是使用 awk:

awk '{print tolower($0)}' < input.txt > output.txt

【讨论】:

  • 这确实是“正确”的做法,因为awk 支持Unicode 而tr 不支持。这应该是公认的答案。
【解决方案2】:

这是因为默认字符类仅适用于标准 ASCII,不包括大多数国际重音字符。如果您有一组已定义的这些字符,最简单的方法是手动添加从特殊大写字符到特殊小写字符的映射:

tr 'ÄÖU[:upper:]' 'äöü[:lower:]'

如果你只有几个重音字符,这是可行的。

【讨论】:

    【解决方案3】:

    不,问题是 tr 不支持 Unicode。

    $ grep -o '[[:upper:]]' <<< JalapeÑo
    J
    Ñ
    $ tr '[:upper:]' '[:lower:]' <<< JalapeÑo
    jalapeÑo
    

    使用[:upper:]等的原因是为了处理ASCII以外的字符。否则,您可以只使用[A-Z][a-z]。这也是为什么 PCRE 有一个名为 [:ascii:]] 的字符类:

    $ perl -pe 's/[[:ascii:]]//g' <<< jalapeño
    ñ
    

    【讨论】:

    • 你是对的!但是到目前为止,使用字符类对我来说从来没有用过,无论是在 unicode 还是在 latin1 中,所以我很久以前就放弃了它,总是手动进行:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2011-12-02
    • 2010-12-08
    • 2023-03-30
    • 2017-09-15
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多