Converter maiúsculos em minúsculos e vice-versa com shell
Segue abaixo algumas dicas para usar quando necessitamos converter letras maiúsculas em minúsculas, e vice-versa, com shell.
Frase usada nos exemplos:
FRASE='PENA QUE NO MUNDO EXISTAM MAIS DESISTENTES DO QUE FRACASSADOS'
Bom, quando pensamos em converter um sequência de caracteres de maiúsculas em minúsculas e vice-versa, logo pensamos no comando
tr, que poderia ser facilmente usado para esse fim, como no exemplo abaixo:
echo "$FRASE" | tr 'A-Z' 'a-z'
Resultado: pena que no mundo existam mais desistentes do que fracassados
Com o comando tr, acima, trocamos todas as ocorrências de caracteres de 'A' a 'Z' maiúsculo (caixa-alta) pelos seus respectivos
correspondentes em minúsculo (caixa-baixa).
Agora apresento uma forma que aprendi recentemente, que traz o mesmo efeito, mas não usa o comando tr, ele usa sequências especiais
dentro de "variáveis protegidas", ou seja, que estão envolvidas pelos colchetes "{}".
Vejamos.
Deixando os caracteres em minúsculo
Deixando todos os caracteres minúsculos:
echo ${FRASE,,}
Resultado: pena que no mundo existam mais desistentes do que fracassados
Deixando apenas o(s) caractere(s) definido(s) em minúsculo:
echo ${FRASE,,A}
Resultado: PENa QUE NO MUNDO EXISTaM MaIS DESISTENTES DO QUE FRaCaSSaDOS
echo ${FRASE,,[AS]}
Resultado: PENa QUE NO MUNDO EXIsTaM MaIs DEsIsTENTEs DO QUE FRaCassaDOs
Definindo uma faixa de valores:
echo ${FRASE,,[A-E]}
Resultado: PeNa QUe NO MUNdO eXISTaM MaIS deSISTeNTeS dO QUe FRacaSSadOS
Também é possível negar a o valor ou a faixa definida:
echo ${FRASE,,[!A-E]}
Resultado: pEnA quE no munDo ExistAm mAis DEsistEntEs Do quE frACAssADos
Deixando os caracteres em maiúsculo
Ok, para facilitar e agilizarmos, basta dizer que para transformar os caracteres em maiúsculo da forma demonstrada, basta trocar as
virgulas ',,' por dois circunflexos '^^', exemplo:
Deixando todos os caracteres maiúsculo:
FRASE='pena que no mundo existam mais desistentes do que fracassados'
$ echo ${FRASE^^}
Resultado: PENA QUE NO MUNDO EXISTAM MAIS DESISTENTES DO QUE FRACASSADOS
Deixando apenas o(s) caractere(s) definido(s) em maiúsculo:
echo ${FRASE^^e}
Resultado: pEna quE no mundo Existam mais dEsistEntEs do quE fracassados
Negando o valor ou a faixa definida:
echo ${FRASE^^[!e]}
Resultado: PeNA QUe NO MUNDO eXISTAM MAIS DeSISTeNTeS DO QUe FRACASSADOS
Os demais exemplo seguem a mesma lógica já mostrada.
É isso ai, espero que seja útil para vocês algum dia, para mim já me ajudou em validação de formulários, ajuste de dados antes de gravar
na base de dados e até mesmo na moderação, em alguns tópicos em que sem querer ou querendo o membro escreve tudo em maiúsculo
(o que na netiqueta significa que você está gritando).
[3] Comentário enviado por rai3mb em 17/11/2011 - 11:53h
Sim precisa está entre aspas (simples ou duplas) para que o interpretador de comandos (shell) saiba onde inicia e terminado o que queremos colocar na variável.
Caso você passe \:
FRASE=isso tá errado
o interpretador vai criar a variável FRASE com o conteúdo 'isso' e depois vai interpretar o 'tá' e vai acusar erro dizendo que não existe esse comando ;-), por isso a necessidade de delimitar a frase com aspas simples ou duplas.
[5] Comentário enviado por roberto_espreto em 17/11/2011 - 13:20h
A "aspas" (abaixo) deve-se ao fato de o bash não saber interpretar corretamente o caracter espaço. Se for apenas uma palavra simples ou uma frase que não contenha espaços, não existe a necessidade de uso.
Outra variação seria:
echo $FRASE | tr '[:lower:]' '[:upper:]'
Dica legal, é sempre bom ver o que a shell nos proporciona.
[8] Comentário enviado por roberto_espreto em 17/11/2011 - 21:14h
Em ambos os links que você enviou, basta visualizar ao lado direito em "Sinais gráficos". Os acentos em si no bash (programação), não tem o mesmo significado que os utilizados na linguagem real, porém alguns nomes dessas acentuações sim. O próprio Júlio Cesar Neves (mestre em shell) utiliza o termo apóstrofo, veja seus artigos e livros.
[10] Comentário enviado por rai3mb em 17/11/2011 - 21:54h
Desculpe se estou sendo chato, só quero frisar o termo correto.
Tudo bem, os livros do Julio são ótimos, tenho alguns. Só que o termo não muda só por isso ;-)
Coloquei esses links pois foram os primeiros que achei, mas tem no Aurélio ;-)
O apostrofo é um sinal em forma de vírgula só que em cima (alteado), para referência-lo rapidamente digitamos apenas: '
No caso do símbolo ' ' : significa aspas simples
o símbolo " " : significa aspas duplas
[11] Comentário enviado por roberto_espreto em 17/11/2011 - 22:13h
Repito que o uso da acentuação utilizado na linguagem formal, difere da linguagem de programação, onde os significados em muitos os casos são diferentes!
Por exemplo, se utiliza (') apóstrofo para indicar a supressão de letras em uma palavra, no caso de Santa Barbara D'oeste (cidade vizinha :P). Em programação, utilizamos o apóstrofo para referenciar uma sentença que possa conter outros caracteres, exemplo:
frase='Isso é um teste!'
Isso é um teste!
Veja que existe o caracter (!) exclamação presente e não realizo a supressão de nenhuma palavra.
E ainda tem a diferença de se utilizar (" ") aspas, pois no mesmo comando acima geraria um erro.
frase="Isso é um teste!"
-bash: !": event not found
Bom sem mais.
E pelo contrário, você não está sendo chato, mostra que tem opinião própria e isso é válido.
[12] Comentário enviado por rai3mb em 17/11/2011 - 22:23h
Legal:
frase="Isso é um teste!"
-bash: !": event not found
Ainda bem que você não levou a discussão como má intencionada.
Agora veja que postei: O apostrofo é um sinal em forma de vírgula só que em cima (alteado), exemplo abaixo:
’
Já aspas simples fica:
' '
O tamanho do caracter aqui não favorece, mas há uma diferença pequena na simbologia, o link que cheguei a postar do wiki (http://pt.wikipedia.org/wiki/Ap%C3%B3strofo), cita :
"É muito difundido, mesmo sendo incorreto, o emprego de uma linha vertical ( ' ) no lugar do apóstrofo ( ’ ), devido ao fato que nas máquinas de escrever e nos teclados dos computadores não haver o apóstrofo tipográfico."
[14] Comentário enviado por Carlos_Cunha em 26/11/2021 - 08:47h
10 Anos depois ainda ajudando :-D
Ótima Dica!!!
#-------------------------------------------------------------------------------------#
"Falar é fácil, me mostre o código." - Linus Torvalds
#-------------------------------------------------------------------------------------#