如何使用带有西里尔文字的 unix 工具?

如何使用带有西里尔文字的 unix 工具?

我最近开始处理西里尔文字,这真的很困难。

我根本无法让我的 Python 脚本使用它。我尝试过。

PHP 运行得很好,但我不懂 PHP。我只是设法将一些东西组合在一起,但我仍然感觉不舒服。 (不过,它可能会成为一个中流砥柱,因为它被证明出乎意料地有用。)

当然,grep这是不可能的。

或者是吗?

这就是这个问题的目的。

我想这样做:

alec@ROOROO:~/$ grep '\w\{4\}' cyrillicstuff

……然后空手而归。

但是有没有办法我可以使用良好的 'ol grep 返回所有 4 个字符或更大的单词,因为它们都是西里尔字母?

答案1

我相信您需要使用基于 unicode 的字符类。单词字符的区域设置感知类是,[:alnum:]并且它在字符类内部使用,因此命令将是

grep '[[:alnum:]]\{4\}' cyrillicstuff

并确保您的区域设置设置为文件实际使用的编码。您可以使用locale命令检查并查找它为LC_CTYPE类别提供的值。

所有使用 POSIX 基本或扩展正则表达式(如 sed、awk 等)的工具以及 python 和 php 使用的 perl 和“perl 兼容正则表达式”都支持此语法。 perl 和“perl 兼容正则表达式”有一种附加语法\pXand \p{xxx},其中Xorxxx是 unicode 类别名称,因此\pL与 相同[:alpha:]并且\p{Uppercase}应该与 相同[:upper:]。所有 unicode 类别都应该可用。


广告蟒蛇。 Python 也完全支持 unicode。在 python 3 中,它应该开箱即用,以区域设置编码打开文件似乎是默认的(但我只是查了一下,没有测试)。但是在 python 2 中,您必须手动指定编码。它们应该为 stdin、stdout 和 stderr 设置,但对于所有其他文件,您必须使用该codecs.open函数并指定从中获取的编码locale.getpreferredencoding(),并且必须像 C 中那样用locale.setlocale(locale.LC_ALL, '').

相关内容