Tudo de:
tr '[:lower:]' '[:upper:]'
(não se esqueça das citações, de outra forma que não vai funcionar se houver um arquivo chamado :, l... ou rno diretório atual) ou:
awk '{print toupper($0)}'
ou:
dd conv=ucase
destinam-se a converter caracteres em maiúsculas de acordo com as regras definidas no código do idioma 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 tre mawk(o padrão awkno Ubuntu, por exemplo) não as seguem. Além disso, não há uma maneira padrão de especificar códigos de idioma que não sejam Cou POSIX, portanto, se você deseja converter arquivos UTF-8 em maiúsculas, de maneira portável, independentemente do código de idioma atual, você não tem sorte com o guia de ferramentas 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ê deve ter cuidado, pois nem todos concordam com a versão em maiúscula de um caractere específico.
Por exemplo, nas localidades turcas, as maiúsculas inão são I, mas İ( <U0130>). Aqui, com o baú trde ferramentas da herança em vez do 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 perlconversão para superior é definida em /usr/share/perl/5.14/unicore/To/Upper.pl, e acho que ela se comporta de maneira diferente em alguns caracteres da GNU libc toupper()na C.UTF8localidade, por exemplo, perlsendo mais precisa. Por exemplo, perlconverte corretamente ɀ para Ɀ , o GNU libc (2.17) não.