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 r
no 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 tr
e mawk
(o padrão awk
no 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 C
ou 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 i
não são I
, mas İ
( <U0130>
). Aqui, com o baú tr
de 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 perl
conversã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.UTF8
localidade, por exemplo, perl
sendo mais precisa. Por exemplo, perl
converte corretamente ɀ para Ɀ , o GNU libc (2.17) não.
Eu acho que você pode fazer isso com
awk
e suatoupper
função.Por exemplo
Não funciona com o GNU
tr
:Funciona com GNU
awk
:fonte
tr
ouawk
implementação. Por exemplo, a maioriatr
converterá caracteres corretamente quando em um local UTF8, de acordo com o local atual, o GNUtr
não.mawk
não.tr
, mas não comawk
Isso funciona com o OS X,
tr
mas não com o GNUtr
:Isso funciona com
gawk
mas não commawk
ounawk
(que está/usr/bin/awk
no OS X):Outra opção é usar o GNU
sed
:No Bash 4.0 e posterior, você também pode usar a
^^
expansão de parâmetro:fonte