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'