すべて大文字に変換したいUTF-8 .txtファイルがあります。 ASCIIの場合は、次のものを使用できます。
tr [:lower:] [:upper:]
ところが発音区別符号のようなものを使っていて、あまり効果がないようです。適切なロケールを設定すると機能すると思いますが、移植可能にはこのスクリプトが必要です。
ベストアンサー1
すべて:
tr '[:lower:]' '[:upper:]'
(引用符を忘れないでください。そうしないと、現在のディレクトリに:
、、、...というl
ファイルがある場合、コマンドは機能しません。)または:r
awk '{print toupper($0)}'
または:
dd conv=ucase
現在、ロケールで定義されている規則に従って文字を大文字に変換するように設計されています。ただし、ロケールが文字セットとしてUTF-8を使用し、小文字から大文字への変換を明示的に定義しても、少なくともGNUおよびdd
GNU(tr
Ubuntuのmawk
デフォルト値など)はこれに従わないことに注意してください。awk
残っているもの基準C
または以外のロケールを指定する方法を使用POSIX
しているため、現在のロケールに関係なくUTF-8ファイルを大文字に移植可能に変換したい場合は、標準のツールボックスを使用できません。
一般に、移植性のための最良の選択はおそらくPerlです。
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
今、特定の文字の大文字のバージョンが何であるかについて誰もが同意するわけではないことに注意してください。
たとえば、トルコ語のロケールでは、大文字ではi
なく()です。ここでは、GNU trの代わりにガボツールボックスを使用します。I
İ
<U0130>
tr
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
私のシステムでは、perl
大文字の変換はに定義されており、/usr/share/perl/5.14/unicore/To/Upper.pl
ロケールの一部の文字でGNU libcとは異なる動作をすることがわかりました。たとえば、正しく配置toupper()
C.UTF8
perl
perl
ɀ到着Ɀ、GNU libc(2.17)はそうではありません。