キリル文字で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互換正規表現」には追加の構文が\pXあります\p{xxx}。ここでXxxxまたははUnicodeカテゴリ名であるため、と同じで、\pL同じで[:alpha:]なけれ\p{Uppercase}ばなりません[:upper:]。すべてのUnicodeカテゴリが利用可能である必要があります。


広告Python。 PythonはUnicodeも完全にサポートしています。すぐに動作する必要があるPython 3では、ロケールエンコーディングでファイルを開くことがデフォルトであるようです(ただし、テストせずに確認しました)。ただし、Python 2ではエンコードを手動で指定する必要があります。 stdin、stdout、stderrに設定する必要がありますが、他のすべてのファイルにはこのcodecs.open関数を使用する必要があります。ここでインポートするエンコーディングを指定しますlocale.getpreferredencoding()locale.setlocale(locale.LC_ALL, '')

おすすめ記事