【发布时间】:2011-03-17 02:02:17
【问题描述】:
我有大写的 UTF 文件,我想将所有单词更改为小写。
我试过了:
`$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt`
但这只会改变没有重音的字符。
谢谢
【问题讨论】:
-
也许这属于超级用户?
-
当然,错了,但我不知道如何移动它。
我有大写的 UTF 文件,我想将所有单词更改为小写。
我试过了:
`$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt`
但这只会改变没有重音的字符。
谢谢
【问题讨论】:
最后我找到的最简单的方法是使用 awk:
awk '{print tolower($0)}' < input.txt > output.txt
【讨论】:
awk 支持Unicode 而tr 不支持。这应该是公认的答案。
这是因为默认字符类仅适用于标准 ASCII,不包括大多数国际重音字符。如果您有一组已定义的这些字符,最简单的方法是手动添加从特殊大写字符到特殊小写字符的映射:
tr 'ÄÖU[:upper:]' 'äöü[:lower:]'
如果你只有几个重音字符,这是可行的。
【讨论】:
不,问题是 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
ñ
【讨论】: