2010-07-16 53 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