2010-07-16 57 views
0

我使用大写的UTF文件,并且想要将所有单词更改为小写。如何更改UTF文件的大小写

我曾尝试:

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

但只变化了cheracter没有口音。

感谢

+0

也许这属于上的超级用户? – 2010-07-17 09:49:58

+0

当然,错误,但我不知道如何移动它。 – liborw 2010-07-17 10:13:07

回答

1

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

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

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

0

不,问题是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 
ñ 
+0

你是对的!但是到目前为止,使用字符类从来没有为我工作,无论是unicode还是latin1,所以我很久以前就放弃了它,并始终手动执行它:-( – JeSuisse 2010-07-17 10:42:55

2

最后,我发现最简单的方法是用awk:

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

这实际上是“正确”的方式关于它,因为'awk'是Unicode感知的,'tr'不是,这应该是被接受的答案。 – DevSolar 2014-12-15 09:29:53