Mistura maiúscula e minúscula em uma palavra

0

Eu tenho uma lista de palavras e quero fazer um caractere minúsculo e um caractere maiúsculo. Por exemplo, a informação da palavra que eu quero ser em formação e INFORMACÃO

    
por antiks 02.06.2017 / 18:43

3 respostas

4

abordagem sed :

- começando com uma letra minúscula:

s="information"
sed 's/\(.\)\(.\)/\L\U/g' <<< $s
iNfOrMaTiOn

- começando com uma letra maiúscula:

s="information"
sed -E 's/(.)(.){,1}/\U\L/g' <<< $s
InFoRmAtIoN
  • \L - Transforme o substituto em minúsculas até que \U ou \E seja encontrado

  • \U - Transforme a substituição em maiúscula até que \L ou \E seja encontrado

Abordagem

gawk (GNU awk):

awk -v FPAT="[a-z]" '{ s=""; for(i=1;i<=NF;i++) { s=s""((i%2)? toupper($i) : $i)} print s }' <<< $s
InFoRmAtIoN
  • FPAT="[a-z]" - padrão representando o valor do campo

Outra variação do awk usando split() function:

awk  '{ n=split($0,a,""); s=""; 
      for(i=1;i<=n;i++) { s=s""((i%2)? toupper(a[i]): tolower(a[i])) } print s }' <<< $s
InFoRmAtIoN
  • split() retorna o número de elementos criados
por 02.06.2017 / 18:47
1

POSIXly

awk '
  {
    for(i = 1; i <= length; i++) {
      c = substr($0, i, 1)
      printf "%s", (i%2 ? toupper(c) : tolower(c))
    }
    print ""
  }' < words.txt
    
por 02.06.2017 / 22:52
0
perl -pe '
   ($_ = lc) =~ s/([a-z])([^a-z]*)(.)/\L$1$2\U$3/g;
   $_ .= y/a-zA-Z/A-Za-z/r;
'
  1. Converta a linha de entrada para todas as letras minúsculas.
  2. Altere o caso alternadamente para abaixar e depois para cima dos caracteres de cada lado do não-alfabeto. Pode não ser nada também, o que significa que os alfas são consecutivos.
  3. Finalmente, inverta o caso usando o comando y , aka, tr para obter as duas versões.

Uso

s="informação";    echo "$ s" | perl -pe '....'

resultados:

iNfOrMaTiOn
InFoRmAtIoN
    
por 02.06.2017 / 22:43