告诉 'tr' az 不仅仅是 ASCII

告诉 'tr' az 不仅仅是 ASCII
tr -sc 'A-Za-z' '\012'

是我需要的,但它不包括所有字母。如何使其适用于法语等语言?你如何告诉“tr”在“az”中还应该有“à”、“é”和“ç”?

答案1

原则:

  • 将区域设置变量设置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'

相关内容