Wszystkie z:
tr '[:lower:]' '[:upper:]'
(nie zapomnij cytaty, które w przeciwnym razie nie będzie działać, jeśli istnieje plik o nazwie :
, l
... lub r
w bieżącym katalogu) lub:
awk '{print toupper($0)}'
lub:
dd conv=ucase
mają na celu konwersję znaków na wielkie litery zgodnie z regułami określonymi w bieżących ustawieniach regionalnych. Jednak nawet tam, gdzie ustawienia narodowe używają UTF-8 jako zestawu znaków i wyraźnie definiują konwersję małych liter na wielkie, przynajmniej GNU dd
, GNU tr
i mawk
(na przykład domyślny awk
w Ubuntu) ich nie przestrzegają. Ponadto nie ma standardowego sposobu określania ustawień narodowych innych niż C
lub POSIX
, więc jeśli chcesz konwertować pliki UTF-8 na przenośne wielkie litery niezależnie od bieżących ustawień narodowych, nie masz szczęścia ze standardową skrzynką narzędzi.
Jak często, dla przenośności, najlepszym rozwiązaniem może być Perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
Teraz musisz uważać, aby nie wszyscy zgadzali się co do wielkiej wersji określonej postaci.
Na przykład w ustawieniach tureckich wielką literą i
nie jest I
, ale İ
( <U0130>
). Tutaj z zestawem narzędzi rodowych tr
zamiast GNU tr:
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
W moim systemie perl
konwersja na górną jest zdefiniowana w /usr/share/perl/5.14/unicore/To/Upper.pl
, i okazuje się, że zachowuje się inaczej na kilku znakach z GNU libc toupper()
w C.UTF8
lokalizacji, na przykład, perl
jest bardziej dokładna. Na przykład perl
poprawnie konwertuje ɀ na Ɀ , GNU libc (2.17) tego nie robi.