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

Publicado por Raimundo Alves Portela em 17/11/2011

[ Hits: 25.254 ]

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

Criar "ícone" para executar Scripts

mySQL-WorkBench no Ubuntu

Venha Conhecer o Yad

Use seu Android como um Laser Pointer

Usando SSH de forma automática com senha (sem publicar chaves)

Leitura recomendada

O jeito mais fácil de escrever e executar um Shell Script no Linux

Acessando mais que 9 parâmetros em shell script

Imprima textos inteiros com o comando "echo"

Problemas de permissões no Nautilus? A solução!

Tornando seus scripts amigáveis (executáveis)

  

Comentários
[1] Comentário enviado por izaias 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 izaias 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 izaias 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 izaias 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



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts