Все:
tr '[:lower:]' '[:upper:]'
(не забудьте кавычки, в противном случае , что не будет работать , если есть файл с именем :
, l
... или r
в текущем каталоге) или:
awk '{print toupper($0)}'
или:
dd conv=ucase
предназначены для преобразования символов в верхний регистр в соответствии с правилами, определенными в текущей локали. Однако даже в тех случаях, когда локали используют UTF-8 в качестве набора символов и четко определяют преобразование из строчных в прописные, по крайней мере, GNU dd
, GNU tr
и mawk
(по умолчанию awk
в Ubuntu, например) не следуют им. Кроме того, не существует стандартного способа указать локали, отличные от C
или POSIX
, поэтому, если вы хотите преобразовать файлы UTF-8 в верхний регистр переносимым независимо от текущей локали, вам не повезло с помощью стандартной инструментальной панели.
Как часто, для мобильности, ваша лучшая ставка может быть perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
Теперь вам нужно остерегаться того, что не все согласны с тем, что является заглавной версией конкретного символа.
Например, в турецких языках прописными буквами i
не является I
, но İ
( <U0130>
). Вот с помощью инструмента семейной реликвии tr
вместо GNU 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) - нет.