Locale

告訴 ’tr’ az 不僅僅是 ASCII

  • November 4, 2014
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'

引用自:https://unix.stackexchange.com/questions/165752