Todos:
tr '[:lower:]' '[:upper:]'
(não esqueça as aspas, caso contrário, não funcionará se houver um arquivo chamado : , l , ... ou r no diretório atual) ou:
awk '{print toupper($0)}'
ou:
dd conv=ucase
são destinados a converter caracteres em maiúsculas de acordo com as regras definidas na localidade atual. No entanto, mesmo onde as localidades usam UTF-8 como o conjunto de caracteres e definem claramente a conversão de minúsculas para maiúsculas, pelo menos, GNU dd , GNU tr e mawk (o padrão awk no Ubuntu, por exemplo) don siga-os. Além disso, não há padrão maneira de especificar localidades diferentes de C ou POSIX , portanto, se você deseja converter arquivos UTF-8 para portáteis em maiúsculas, independentemente da localidade atual, você está sem sorte com o ferramental padrão.
Com frequência, para portabilidade, sua melhor aposta pode ser perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
Agora, você precisa tomar cuidado para que nem todos concordem com a versão maiúscula de um caractere específico.
Por exemplo, nas localidades turcas, a maiúscula i não é I , mas İ ( <U0130> ). Aqui com o toolchest heirloom tr em vez de GNU tr:
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
No meu sistema, a conversão de perl para superior está definida em /usr/share/perl/5.14/unicore/To/Upper.pl , e acho que ela se comporta de maneira diferente em alguns caracteres do GNU libc toupper() no C.UTF8 locale, por exemplo, perl sendo mais preciso. Por exemplo, perl converte corretamente / para Ɀ , o GNU libc (2.17) não.