关于linux:如何更改UTF文件的大小写

How to change case of UTF file

我有一个大写的UTF文件,我想把所有单词都改成小写。

我已经尝试过:

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

但这只改变了切拉特没有口音。

谢谢


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

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


这是因为默认字符类只在标准的ASCII上工作,而标准的ASCII不包括大部分国际重音字符。如果您已经定义了一组这些字符,最简单的方法就是手动添加从特殊大写字符到特殊小写字符的映射:

TR?U[[上图:] ]??[下::]

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


不,问题是tr不支持Unicode。

1
2
3
4
5
$ grep -o '[[:upper:]]' <<< Jalape?o
J
?
$ tr '[:upper:]' '[:lower:]' <<< Jalape?o
jalape?o

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

1
2
$ perl -pe 's/[[:ascii:]]//g' <<< jalape?o
?