GNU排序西里尔文行忽略大小写

托马斯

我有UTF-8格式的文件,其中包含拉丁字母或西里尔字母的行。我正在尝试对它进行排序,而忽略了这种情况。

我试过了

LC_ALL="ru" sort --ignore-case in.txt

但西里尔字母行仍然排序不正确,而拉丁文中的行排序很好。

排序文件示例:

Apple
apple
Banana
banana
...
// but with cyrillic letters i got this:
...
Арбуз
Банан
арбуз
банан

我该如何处理?先感谢您。

随机832

我怀疑“ ru”不是有效的语言环境。尝试使用该命令lang=ru locale,看看是否有任何错误消息。在我的系统上,“ ru”是无效的语言环境,“ ru_RU”在iso8859-5中。您需要ru_RU.UTF-8才能在utf-8中工作。

$ LANG=ru locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

要查找用于语言环境的字符集,可以使用以下locale工具:

$ LANG=ru_RU locale -c -k charmap collate-codeset
LC_CTYPE
charmap="ISO-8859-5"
LC_COLLATE
collate-codeset="ISO-8859-5"

请注意,语言环境是按类别定义的。LC_COLLATE类别是用于排序的类别。设置LC_ALL将覆盖所有参数,或者可以使用命名的环境变量单独设置一个参数,也可以通过设置LANG设置默认值。大多数人会希望将LANG设置为每日使用,而不是LC_ALL。

在该locale工具的输出中,基于LC_ALL或LANG设置的类别将显示在引号中,而由它们自己的变量设置的类别(如果设置了LC_ALL本身,如果未设置LC_ALL则显示LANG)将不显示引号。例如:

$ LANG=en_US.UTF-8 LC_MESSAGES=ru_RU.UTF-8 locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
...
LC_MESSAGES=ru_RU.UTF-8
...
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档