Locale
告訴 ’tr’ az 不僅僅是 ASCII
tr -sc 'A-Za-z' '\012'
是我需要的,但它不包括所有字母。您如何使這項工作適用於法語等語言?你怎麼能告訴 ’tr’ 在 ‘az’ 中也應該有 ‘à’、‘é’ 和 ‘ç’?
原則:
- 將語言環境變數設置
LC_CTYPE
為描述所需字元集和編碼的變數,例如LC_CTYPE=fr_FR.UTF-8
.- 用於
[:alpha:]
代表所有字母,因為字元範圍在超出 ASCII 的語言環境中沒有明確定義(它們取決於實現和應用程序),並且A-Za-z
即使在範圍基於程式碼點的語言環境中也不會列舉所有字母數字(它錯過了 之前A
或之後的字母Z
,其中法語恰好沒有,但其他語言有:Å
在瑞典語中,Ž 在捷克語中,……)。因此,
tr -sc '[:alpha:]' '\012'
然而,許多實現
tr
,包括 GNU coreutils 中的實現,都不支持多字節編碼。例如,上面的命令適用於 Latin-1 編碼,但不適用於 UTF-8。您可以改用 sed。sed 's/[^[:alpha:]][^[:alpha:]]*/_/g'