Se a string já estiver armazenada em uma variável, você poderá usar basha expansão de parâmetro, especifialmente ${parameter,,pattern}(disponível desde o bash 4.0), onde parameteré o nome da sua variável e patterné omitido:
Se você estiver usando zsh, poderá usar Sinalizadores de Expansão de Parâmetro ( ${(FLAGS)NAME}; disponível desde o zsh 2.5) para obter os mesmos resultados. A bashsintaxe não funciona em zsh1) . A bandeira para minúsculas é L; para maiúsculas é U:
A ${string,,}notação existe apenas para o bash versão 4+. Caso contrário, é necessária uma das outras soluções, como $(echo $string | tr '[:upper:]' '[:lower:]').
Quinn Comendant
40
Existem muito poucos métodos que funcionam corretamente com Unicode:
O GNU sed 4.2.2 funciona :
$ echo "Idą gęsi łąką"| sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
No Ubuntu 13.04, tenho gawkcomo o awk padrão (como mostrado em update-alternatives --display awk). Tem certeza de que mawké o padrão na 13.10?
kiri
seds desde 1990 apoiaram a \Uopção ;-). Não é um recurso específico do gnu-sed. Caso contrário, ótima resposta, tantas opções, tão pouco tempo ;-) Boa sorte a todos!
No seu exemplo, a bolsa ucnão funciona no Perl porque você precisa use Encodeou use utf8. Reescreva seu exemplo como echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'e ele funcionará. Veja também stackoverflow.com/a/13261662/3701431
Sergiy Kolodyazhnyy
20
Eu usaria o comando bash typeset interno ou declare para definir uma variável em minúscula.
Os caracteres são reduzidos quando o valor é definido, não quando você digita a variável. Portanto, é melhor digitar no início do script. Para maiúsculas, você pode digitar -u .
Isso não é específico para o bash shell, que também funciona no ksh, talvez na definição de shell do POSIX.
EDIT: Muitas pessoas gentilmente me apontaram o fato de que o typeset agora é considerado obsoleto no bash e substituído por declare . Ambos os comandos são equivalentes.
$ help typeset
typeset: typeset [-aAfFgilrtux][-p] name[=value]...Set variable values and attributes.Obsolete.See`help declare'.
$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
Set variable values and attributes.
Eu mesmo ainda uso a sintaxe tipográfica enquanto trabalho em ambiente heterogêneo, portanto, não preciso reescrever meus scripts.
+1 Incrível, eu nunca conheci esse! entre algumas informações extras: Eu procurei isso no manual e parece que typeseté considerado desprovido e substituído pordeclare
thom
11
@thom obrigado, parece que o bash começou a ter uma vida longe de suas "raízes Bourne shell" :)
Respostas:
Se a string já estiver armazenada em uma variável, você poderá usar
bash
a expansão de parâmetro, especifialmente${parameter,,pattern}
(disponível desde o bash 4.0), ondeparameter
é o nome da sua variável epattern
é omitido:Observe que isso não altera o valor da variável, apenas a saída. Para alterar a variável, você deve atribuir o novo valor:
A conversão em maiúsculas funciona com
${parameter^^pattern}
:Isso funciona também com cadeias de caracteres Unicode (pelo menos nas versões atuais do bash, provavelmente precisa de pelo menos o 4.3):
Se você estiver usando
zsh
, poderá usar Sinalizadores de Expansão de Parâmetro (${(FLAGS)NAME}
; disponível desde o zsh 2.5) para obter os mesmos resultados. Abash
sintaxe não funciona emzsh
1) . A bandeira para minúsculas éL
; para maiúsculas éU
:Isso também funciona com cadeias de caracteres Unicode (pelo menos desde o zsh 5.0; não tentei com versões anteriores):
1) Embora, considerando que o zsh tenha isso por muito mais tempo, provavelmente deva ser: "a
zsh
sintaxe não funcionabash
.fonte
${string,,}
notação existe apenas para o bash versão 4+. Caso contrário, é necessária uma das outras soluções, como$(echo $string | tr '[:upper:]' '[:lower:]')
.Existem muito poucos métodos que funcionam corretamente com Unicode:
O GNU sed 4.2.2 funciona :
bash 4.2.45 declare não funciona:
A expansão do parâmetro bash 4.2.45 não funciona:
bash 4.3.42
declare
e trabalho de expansão de parâmetros :O GNU tr 8.20 não funciona:
O mawk (padrão do awk no Ubuntu 13.10) não funciona:
gawk works :
O Perl pure uc () não funciona:
O Python 2 sem nenhuma dica Unicode não funciona:
Python 2, quando instruído a lidar com obras Unicode :
O Python 3 funciona :
fonte
gawk
como o awk padrão (como mostrado emupdate-alternatives --display awk
). Tem certeza de quemawk
é o padrão na 13.10?sed
s desde 1990 apoiaram a\U
opção ;-). Não é um recurso específico do gnu-sed. Caso contrário, ótima resposta, tantas opções, tão pouco tempo ;-) Boa sorte a todos!uc
não funciona no Perl porque você precisause Encode
ouuse utf8
. Reescreva seu exemplo comoecho "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
e ele funcionará. Veja também stackoverflow.com/a/13261662/3701431Eu usaria o comando bash typeset interno ou declare para definir uma variável em minúscula.
Os caracteres são reduzidos quando o valor é definido, não quando você digita a variável. Portanto, é melhor digitar no início do script. Para maiúsculas, você pode digitar -u .
Isso não é específico para o bash shell, que também funciona no ksh, talvez na definição de shell do POSIX.
EDIT: Muitas pessoas gentilmente me apontaram o fato de que o typeset agora é considerado obsoleto no bash e substituído por declare . Ambos os comandos são equivalentes.
Eu mesmo ainda uso a sintaxe tipográfica enquanto trabalho em ambiente heterogêneo, portanto, não preciso reescrever meus scripts.
fonte
typeset
é considerado desprovido e substituído pordeclare
Você pode fazer isso com o
tr
comandoNo terminal ( Ctrl+ Alt+ T)
Este comando:
irá converter em minúsculas para maiúsculas.
irá converter maiúsculas em minúsculas.
Exemplo:
O crédito vai para a cibercidade
fonte
tr A-Z a-z
também funcionará.Você também pode canalizar as coisas
sed
:E
\L
terá o efeito oposto:fonte
Não é uma solução pura para o bash, mas você pode passar as cordas
perl
(como Oli fez comsed
):E
\L
terá o efeito oposto:fonte
Use este comando simples Para maiúsculas e minúsculas Onde 'f' é o nome do arquivo em que você deseja fazer a conversão.
Para maiúsculas e minúsculas
fonte