Tutto di:
tr '[:lower:]' '[:upper:]'
(non dimenticare le virgolette, altrimenti che non funziona se c'è un file chiamato :
, l
, ... o r
nella directory corrente) oppure:
awk '{print toupper($0)}'
o:
dd conv=ucase
hanno lo scopo di convertire i caratteri in maiuscolo in base alle regole definite nella locale corrente. Tuttavia, anche laddove le versioni locali utilizzano UTF-8 come set di caratteri e definiscono chiaramente la conversione da lettere minuscole a maiuscole, almeno GNU dd
, GNU tr
e mawk
(l'impostazione predefinita awk
su Ubuntu per esempio) non li seguono. Inoltre, non esiste un modo standard per specificare locali diversi da C
o POSIX
, quindi se si desidera convertire i file UTF-8 in maiuscolo in modo portabile indipendentemente dalle impostazioni internazionali correnti, si è sfortunati con il toolchest standard.
Come spesso, per portabilità, la tua scommessa migliore potrebbe essere perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
Ora, devi stare attento che non tutti sono d'accordo su quale sia la versione maiuscola di un personaggio specifico.
Ad esempio, nelle versioni locali turche, i
non è maiuscolo I
, ma İ
( <U0130>
). Qui con il toolchest cimelio tr
invece di GNU tr:
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
Sul mio sistema, la perl
conversione in alto è definita in /usr/share/perl/5.14/unicore/To/Upper.pl
, e trovo che si comporti in modo diverso su alcuni caratteri della libc GNU toupper()
nelle impostazioni C.UTF8
locali per esempio, perl
essendo più accurato. Ad esempio, perl
converte correttamente ɀ in Ɀ , la GNU libc (2.17) no.