Converter maiúsculos em minúsculos e vice-versa com shell

Publicado por Raimundo Alves Portela em 17/11/2011

[ Hits: 38.932 ]

Blog: http://portelanet.com

 


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).

Att,
@rai3mb

Outras dicas deste autor

Tint2 - minha barra/painel de janelas de volta

Pastebin e outros integrados ao seu Gnome

OpenOffice.org - copiar e colar texto e imagem da internet

Customizar o Lightdm (gerenciador de login do Ubuntu/Mint)

Monitorando seu HD - Listando detalhes sobre os arquivos abertos no sistema

Leitura recomendada

Backup da pasta de usuário sem copiar os arquivos ocultos

Como manter seu código atualizado com um repositório Git remoto

Multitail - Monitore vários logs em tempo real

Criando e utilizando uma "biblioteca de funções"

Três formas de executar HTTP Request em Shell Script

  

Comentários
[1] Comentário enviado por removido em 17/11/2011 - 11:06h

Rapaz, muito boa essa dica!

Cansamos de ver tópicos em caixa alta, e às vezes não dá para editá-los.
É praticamente uma ajuda "específica para os moderadores". rs


Vou praticar.
Muito bom, Rai!

[2] Comentário enviado por removido em 17/11/2011 - 11:11h

Uma coisa que esqueci de peguntar:
A frase original deve estar entre aspas?

Veja, você demonstra assim: Frase='exemplo'
Ou não tem nada a ver, afinal tudo é passado para o terminal?

[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.

Abraços

[4] Comentário enviado por removido em 17/11/2011 - 12:26h

Ok, brigadão!

[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.

( ' ) = Lê-se apóstrofo e não aspas! =D

Att,

[6] Comentário enviado por removido em 17/11/2011 - 13:25h

Esta é a Filosofia Open Source!

VLW Roberto

[7] Comentário enviado por rai3mb em 17/11/2011 - 20:47h

Só para corrigir a informação dada pelo roberto_espreto:

O correto para ( ' ' ) é aspas mesmo, no caso de um ( ' ) ai sim poderíamos dizer que é um apostrofo, veja;
http://pt.wikipedia.org/wiki/Ap%C3%B3strofo
Reforçando.
http://pt.wikipedia.org/wiki/Aspas

[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.

Att,

[9] Comentário enviado por julio_hoffimann em 17/11/2011 - 21:53h

Ótima dica Raimundo!

O Bash tem muitos recursos, pena que são pouco utilizados.

Abraço!

[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.

Att,

[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."

Abraços

[13] Comentário enviado por chimico em 20/11/2011 - 17:30h

Ótima dica rai3mb, favoritado
Abraços

[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
#-------------------------------------------------------------------------------------#



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts