16

ロシアの短編小説から単語リストを抽出しようとしています。

#!/bin/sh

export LC_ALL=ru_RU.utf8

sed -re 's/\s+/\n/g' | \
sed 's/[\.!,—()«»;:?]//g' | \
tr '[:upper:]' '[:lower:]' | \
sort | uniq

ただし、tr手順はキリル文字の大文字を小文字にすることではありません。移植可能な文字クラスを使って賢いと思った!

$ LC_ALL=ru_RU.utf8 echo "Г" | tr [:upper:] [:lower:]
Г

参考までに、Chrome ブラウザ ウィンドウから Vim にコピー アンド ペーストして、ロシア語のテキストを取得しました。画面に正しく表示されます(パテ端末)。これは Cygwin の bash シェルにあります。Linux の Bash と同じように動作するはずです (はずです!)。

パイプ内のユニコードテキストを小文字にする、移植可能で信頼できる方法は何ですか?

4

2 に答える 2

13

これは私がウィキペディアで見つけたものです(ただし、参照はありません):

および従来の Unixtrを含むのほとんどのバージョンは、シングルバイト文字で動作し、Unicode に準拠していません。例外は、基本的な Unicode サポートを提供するHeirloom Toolchest実装です。GNU trtr

また、これは古いですが関連しています。

コメントで述べたsedように、うまくいくようです(GNU sed少なくとも):

$ echo 'СТЭК' | sed 's/[[:upper:]]*/\L&/'
стэк
于 2012-11-14T16:40:14.657 に答える