Discussion:
Nome próprio - Mudar de minúscula p/ maiúscula
Daniel Merli Morais
2010-01-19 13:47:58 UTC
Permalink
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
maiúsculo? Por exemplo, em um arquivo que contenha nomes próprios:

João silva
Fulano ciclano
Maria oliveira

Deveria ficar da seguinte forma:

João Silva
Fulano Ciclano
Maria Oliveira

Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém não
consigo substituir a primeira letra após o espaço por sua correspondente em
maiúscula. Disse a primeira letra após o espaço porque a primeira letra de
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.

Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"

Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
MSN: ***@hotmail.com
LinkedIn: www.linkedin.com/in/dmerlimorais


[As partes desta mensagem que não continham texto foram removidas]
®i©@®ÐØ
2010-01-19 14:10:44 UTC
Permalink
sed 's/\(^\)\?\([^ ]*\)/\u&/g' nomes.lst
Post by Daniel Merli Morais
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
João silva
Fulano ciclano
Maria oliveira
João Silva
Fulano Ciclano
Maria Oliveira
Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém não
consigo substituir a primeira letra após o espaço por sua correspondente em
maiúscula. Disse a primeira letra após o espaço porque a primeira letra de
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.
Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"
Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
LinkedIn: www.linkedin.com/in/dmerlimorais
[As partes desta mensagem que não continham texto foram removidas]
--
-------------------------------------------------------------------------------------
ATENÇÃO: EVITE QUE SPAMMERS CAPTURE CONTATOS DE SUA LISTA,
SEMPRE QUE POSSÍVEL REMOVA OS EMAILS DO REMETENTE E ENVIE EM (COO- CÓpia
Oculta) PARA SEUS CONTATOS.
;)

A Graça do nosso Senhor Jesus Cristo seja contigo. (1ªTs 5.28)
The grace of our Lord Jesus Christ be with you. (1ªTs 5.28)
Jesus te ama, aceite-O! Jesus loves you, accept you Him!

®i©@®ÐØ


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Moacir Souza
2010-01-19 14:12:14 UTC
Permalink
Daniel,

De uma porrada só, sem pensar muito (tenho que correr para o almoço
:D), eu pensei nisso:

$ cat a
Um teste Mais Legal
moacir da cruz souza filho
teste de string

$ cat a | sed -r "s/(^[a-z]| [a-z])/\U&/g"
Um Teste Mais Legal
Moacir Da Cruz Souza Filho
Teste De String

[]'s,
Moacir Filho
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho

-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados

-Mestrando em Ciências da Computação
Universidade de Brasília

-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco

-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco

-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


[As partes desta mensagem que não continham texto foram removidas]
Daniel Merli Morais
2010-01-19 14:43:10 UTC
Permalink
Muito obrigado Moacir e Ricardo... Não conhecia o \U, vou dar uma olhada
melhor nisso...

Valeu.
Post by Moacir Souza
Daniel,
De uma porrada só, sem pensar muito (tenho que correr para o almoço
$ cat a
Um teste Mais Legal
moacir da cruz souza filho
teste de string
$ cat a | sed -r "s/(^[a-z]| [a-z])/\U&/g"
Um Teste Mais Legal
Moacir Da Cruz Souza Filho
Teste De String
[]'s,
Moacir Filho
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho
-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados
-Mestrando em Ciências da Computação
Universidade de Brasília
-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco
-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco
-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[As partes desta mensagem que não continham texto foram removidas]
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"

Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
MSN: ***@hotmail.com
LinkedIn: www.linkedin.com/in/dmerlimorais


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Julio C. Neves
2010-01-19 14:44:18 UTC
Permalink
Fala Daniel,
Isso não vai resolver o teu problema especificamente, mas vale para mostrar
para o pessoal as novidades do bash 4.0 que estou incorporando ao meu livro.


-

${parâmetro^}
-

${parâmetro,}

Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a caixa
das letras do texto que está sendo expandido. Quando usamos circunflexo (^),
a expansão é feita para maiúsculas e quando usamos vírgula (,), a expansão é
feita para minúsculas.

Exemplo:

*$ Nome="botelho"*

*$ echo ${Nome^} *

Botelho

*$ echo ${Nome^^} *

BOTELHO


*$ Nome="botelho carvalho"*

*$ echo ${Nome^} *

*Botelho carvalho **Que pena...*


Um fragmento de *script* que pode facilitar a sua vida:

read -p "Deseja continuar (s/n)? "

[[ ${REPLY^} == N ]] && exit


Esta forma evita testarmos se a resposta dada foi um N (maiúsculo) ou um n
(minúsculo).

No *Windows*, além dos vírus e da instabilidade, também são frequentes nomes
de arquivos com espaços em branco e quase todos em maiúsculas. No exemplo
anterior, vimos como trocar os espaços em branco por sublinha (_), no
próximo veremos como passá-los para minúsculas:

*$ cat trocacase.sh*

#!/bin/bash

# Se o nome do arquivo tiver pelo menos uma

#+ letra maiúscula, troca-a para minúscula

for Arq in *[A-Z]* *Pelo menos 1 minúscula*

do

if [ -f "${Arq,,}" ] *Arq em minúsculas já existe?*

then

echo ${Arq,,} já existe

else

mv "$Arq" "${Arq,,}"

fi

done

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Daniel Merli Morais
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
João silva
Fulano ciclano
Maria oliveira
João Silva
Fulano Ciclano
Maria Oliveira
Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém não
consigo substituir a primeira letra após o espaço por sua correspondente em
maiúscula. Disse a primeira letra após o espaço porque a primeira letra de
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.
Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"
Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
LinkedIn: www.linkedin.com/in/dmerlimorais
[As partes desta mensagem que não continham texto foram removidas]
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Moacir Souza
2010-01-19 14:54:45 UTC
Permalink
Daniel,

Parâmetros como o \U, \L, \E são bastante úteis, mas não aparecem
no man do sed (ao menos no meu). Para maiores detalhes, acesse info
sed e busque pela seção * The "s" Command:: `sed''s Swiss Army Knife.

[]'s,
Moacir Filho

P.S.: Mestre Julio, tem que aparecer aqui por Brasília de novo para
uma atualização do Curso de Shell com essas magavilhas do bash 4,
hein? (E para tomar um chope comigo e com o Pastore, claro).
Post by Julio C. Neves
Fala Daniel,
Isso não vai resolver o teu problema especificamente, mas vale para mostrar
para o pessoal as novidades do bash 4.0 que estou incorporando ao meu livro.
  -
  ${parâmetro^}
  -
  ${parâmetro,}
Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a caixa
das letras do texto que está sendo expandido. Quando usamos circunflexo (^),
a expansão é feita para maiúsculas e quando usamos vírgula (,), a expansão é
feita para minúsculas.
*$ Nome="botelho"*
*$ echo ${Nome^} *
Botelho
*$ echo ${Nome^^} *
BOTELHO
 *$ Nome="botelho carvalho"*
*$ echo ${Nome^} *
*Botelho carvalho **Que pena...*
read -p "Deseja continuar (s/n)? "
[[ ${REPLY^} == N ]] && exit
 Esta forma evita testarmos se a resposta dada foi um N (maiúsculo) ou um n
(minúsculo).
No *Windows*, além dos vírus e da instabilidade, também são frequentes nomes
de arquivos com espaços em branco e quase todos em maiúsculas. No exemplo
anterior, vimos como trocar os espaços em branco por sublinha (_), no
*$ cat trocacase.sh*
#!/bin/bash
# Se o nome do arquivo tiver pelo menos uma
#+ letra maiúscula, troca-a para minúscula
 for Arq in *[A-Z]* *Pelo menos 1 minúscula*
do
 if [ -f "${Arq,,}" ] *Arq em minúsculas já existe?*
 then
 echo ${Arq,,} já existe
else
 mv "$Arq" "${Arq,,}"
 fi
done
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Daniel Merli Morais
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
João silva
Fulano ciclano
Maria oliveira
João Silva
Fulano Ciclano
Maria Oliveira
Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém não
consigo substituir a primeira letra após o espaço por sua correspondente em
maiúscula. Disse a primeira letra após o espaço porque a primeira letra de
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.
Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"
Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
LinkedIn: www.linkedin.com/in/dmerlimorais
[As partes desta mensagem que não continham texto foram removidas]
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho

-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados

-Mestrando em Ciências da Computação
Universidade de Brasília

-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco

-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco

-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir Souza
2010-01-19 15:02:47 UTC
Permalink
Em tempo..

Eu mexo muito com strings, tanto em Shell quando em outras
linguagens. Essa página [1], que está sempre guardada nos meus
bookmarks e que trata de JavaScript, já me deu várias ideias de como
manipular texto para um fim espefício em Shell. Tem até um código para
o seu caso [2].

[1] Link: http://lawrence.ecorp.net/inet/samples/regexp-intro.php
[2] Link: http://lawrence.ecorp.net/inet/samples/regexp-format.php#cap

[]'s,
Moacir Filho
    Daniel,
    Parâmetros como o \U, \L, \E são bastante úteis, mas não aparecem
no man do sed (ao menos no meu). Para maiores detalhes, acesse info
sed e busque pela seção * The "s" Command:: `sed''s Swiss Army Knife.
[]'s,
Moacir Filho
P.S.: Mestre Julio, tem que aparecer aqui por Brasília de novo para
uma atualização do Curso de Shell com essas magavilhas do bash 4,
hein? (E para tomar um chope comigo e com o Pastore, claro).
Post by Julio C. Neves
Fala Daniel,
Isso não vai resolver o teu problema especificamente, mas vale para mostrar
para o pessoal as novidades do bash 4.0 que estou incorporando ao meu livro.
  -
  ${parâmetro^}
  -
  ${parâmetro,}
Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a caixa
das letras do texto que está sendo expandido. Quando usamos circunflexo (^),
a expansão é feita para maiúsculas e quando usamos vírgula (,), a expansão é
feita para minúsculas.
*$ Nome="botelho"*
*$ echo ${Nome^} *
Botelho
*$ echo ${Nome^^} *
BOTELHO
 *$ Nome="botelho carvalho"*
*$ echo ${Nome^} *
*Botelho carvalho **Que pena...*
read -p "Deseja continuar (s/n)? "
[[ ${REPLY^} == N ]] && exit
 Esta forma evita testarmos se a resposta dada foi um N (maiúsculo) ou um n
(minúsculo).
No *Windows*, além dos vírus e da instabilidade, também são frequentes nomes
de arquivos com espaços em branco e quase todos em maiúsculas. No exemplo
anterior, vimos como trocar os espaços em branco por sublinha (_), no
*$ cat trocacase.sh*
#!/bin/bash
# Se o nome do arquivo tiver pelo menos uma
#+ letra maiúscula, troca-a para minúscula
 for Arq in *[A-Z]* *Pelo menos 1 minúscula*
do
 if [ -f "${Arq,,}" ] *Arq em minúsculas já existe?*
 then
 echo ${Arq,,} já existe
else
 mv "$Arq" "${Arq,,}"
 fi
done
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Daniel Merli Morais
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
João silva
Fulano ciclano
Maria oliveira
João Silva
Fulano Ciclano
Maria Oliveira
Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém não
consigo substituir a primeira letra após o espaço por sua correspondente em
maiúscula. Disse a primeira letra após o espaço porque a primeira letra de
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.
Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"
Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
LinkedIn: www.linkedin.com/in/dmerlimorais
[As partes desta mensagem que não continham texto foram removidas]
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho
-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados
-Mestrando em Ciências da Computação
Universidade de Brasília
-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco
-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco
-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho

-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados

-Mestrando em Ciências da Computação
Universidade de Brasília

-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco

-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco

-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Julio C. Neves
2010-01-20 11:21:42 UTC
Permalink
Fala Moacir,
em cada turma que leciono por esse Brasilzão, tem sempre um ou mais
destaques (como em escola de samba ;), nesta turma de BSB foi vc, em Macaé o
Waldirio e o Jujulio, em Curitiba o Lucas,... e por aí vai... Como vc tb é
mestre, sabe que não é o professor que ensina, mas sim o aluno que aprende.
Nós damos as ferramentas e os alunos as usam ou não.

Estou escrevendo isso pq é muito interessante notar que em *todas* as turmas
que leciono, falo da nossa lista, e da necessidade do treinando aqui se
inscrever para consolidar o que ensinei, no entanto o que acontece é que nem
todos se inscrevem, mas os que se inscrevem viram destaques. Isso é
coincidência? Claro que não! Além da lista ser a melhor que já vi na vida
(ogrigado MrBiTs), as pessoas que, nela se inscrevem durante um treinamento,
é pq desejam aprender, e aí a tarefa do professor fica fácil.

Bem, indo ao ponto: o Bash 4.0 além disso incorporou uma série de
facilidade, nas quais destaco:

====================
Vetores associativos

A partir do Bash 4.0, passou a existir o vetor associativo. Chama-se vetor
associativo, aqueles cujos índices são alfabéticos. As regras que valem para
os vetores inteiros, valem também para os associativos, porém antes de
valorar estes últimos, é obrigatório declará-los.

Exemplo:

*$ declare -A Animais **Obrigatório para vetor associativo*

*$ Animais[cavalo]=doméstico *

*$ Animais[zebra]=selvagem *

*$ Animais[gato]=doméstico *

*$ Animais[tigre]=selvagem *

É impossível gerar todos os elementos de uma só vez, como nos vetores
inteiros. Assim sendo, não funciona a sintaxe:

Animais =([cavalo]=doméstico [zebra]=selvagem \ [gato]=doméstico
[tigre]=selvagem)

*$ echo ${Animais[@]} *

doméstico selvagem doméstico selvagem

*$ echo ${!Animais[@]} *

gato zebra cavalo tigre

Repare que os valores não são ordenados, ficam armazenados na ordem que são
criados, diferentemente dos vetores inteiros que ficam em ordem numérica.

Supondo que esse vetor tivesse centenas de elementos, para listar
separadamente os domésticos dos selvagens, poderíamos fazer um *script*assim:

*$ cat animal.sh*

#!/bin/bash

# Separa animais selvagens e domésticos

declare -A Animais

Animais[cavalo]=doméstico *Criando vetor para teste*

Animais[zebra]=selvagem *Criando vetor para teste*

Animais[gato]=doméstico *Criando vetor para teste*

Animais[tigre]=selvagem *Criando vetor para teste*

Animais[urso pardo]=selvagem *Criando vetor para teste*

for Animal in "${!Animais[@]}" *Percorrendo vetor pelo índice*

do

if [[ "${Animais[$Animal]}" == selvagem ]]

then

Sel=("${Sel[@]}" "$Animal") *Gerando vetor p/ selvagens*

else

Dom=("${Dom[@]}" "$Animal") *Gerando vetor p/ domésticos*

fi

done

# Operador condicional, usado para descobrir qual

#+ vetor tem mais elementos. Veja detalhes na seção

#+ O interpretador aritmético do Shell

Maior=$[${#Dom[@]}>${#Sel[@]}?${#Dom[@]}:${#Sel[@]}]

clear

tput bold; printf "%-15s%-15s\n" Domésticos Selvagens; tput sgr0

for ((i=0; i<$Maior; i++))

{

tput cup $[1+i] 0; echo ${Dom[i]}

tput cup $[1+i] 14; echo ${Sel[i]}

}

Gostaria de chamar a sua atenção para um detalhe: neste *script* me referi a
um elemento de vetor associativo empregando ${Animais[$Animal]} ao passo que
me referi a um elemento de um vetor inteiro usando ${Sel[i]}. Ou seja,
quando usamos uma variável como índice de um vetor inteiro, não precisamos
prefixá-la com um cifrão ($), ao passo que no vetor associativo, o cifrão($) é
obrigatório.
Lendo um arquivo para um vetor

Ainda falando do Bash 4.0, eis que ele surge com uma outra novidade: o
comando intrínseco (*builtin*) mapfile, cuja finalidade é jogar um arquivo
de texto inteiro para dentro de um vetor, sem *loop* ou substituição de
comando

-

EPA! Isso deve ser muito rápido!
-

E é. Faça os teste e comprove!

Exemplo:

*$ cat frutas *

abacate

maçã

morango

pera

tangerina

uva

*$ mapfile vet < frutas **Mandando frutas para vetor vet*

*$ echo ${vet[@]} **Listando todos elementos de vet*

abacate maçã morango pera tangerina uva

Obteríamos resultado idêntico se fizéssemos:

*$ vet=($(cat frutas))*

Porém isso seria mais lento porque a substituição de comando é executada em
um *subshell*.

Uma outra forma de fazer isso que logo vem à cabeça é ler o arquivo com a
opção -a do comando read. Vamos ver como seria o comportamento disso:

*$ read -a vet < frutas *

$ echo ${vet[@]}

abacate

Como deu para perceber, foi lido somente o primeiro registro de frutas.

====================

Outra coisa que destaco são os coprocessos. Esta técnica permite iniciar
diversos processos simultaneamente e sincronizá-los com o shell chamador a
qq momento desejado. Assim sendo, se desejamos fazer wget em diversas
páginas, não é mais necessário enfileirar esta requisições, basta criar um
coprocesso para cada página, sincronizando-os no fim de cada wget, ou seja,
é o famoso thread.

A medida que surgirem oportunidades, vou postando na lista, mas tb vou
publicá-las no changelog da 8a edição do meu livro, que fica na minha página
(www.julioneves.com)

PS: O Moacir disse publicamente aqui na lista que está sempre mexendo com
strings.

- Moacir, cuidado! Mexer com strings dá cadeia! ;)
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Moacir Souza
Daniel,
Parâmetros como o \U, \L, \E são bastante úteis, mas não aparecem
no man do sed (ao menos no meu). Para maiores detalhes, acesse info
sed e busque pela seção * The "s" Command:: `sed''s Swiss Army Knife.
[]'s,
Moacir Filho
P.S.: Mestre Julio, tem que aparecer aqui por Brasília de novo para
uma atualização do Curso de Shell com essas magavilhas do bash 4,
hein? (E para tomar um chope comigo e com o Pastore, claro).
Post by Julio C. Neves
Fala Daniel,
Isso não vai resolver o teu problema especificamente, mas vale para
mostrar
Post by Julio C. Neves
para o pessoal as novidades do bash 4.0 que estou incorporando ao meu
livro.
Post by Julio C. Neves
-
${parâmetro^}
-
${parâmetro,}
Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a
caixa
Post by Julio C. Neves
das letras do texto que está sendo expandido. Quando usamos circunflexo
(^),
Post by Julio C. Neves
a expansão é feita para maiúsculas e quando usamos vírgula (,), a
expansão é
Post by Julio C. Neves
feita para minúsculas.
*$ Nome="botelho"*
*$ echo ${Nome^} *
Botelho
*$ echo ${Nome^^} *
BOTELHO
*$ Nome="botelho carvalho"*
*$ echo ${Nome^} *
*Botelho carvalho **Que pena...*
read -p "Deseja continuar (s/n)? "
[[ ${REPLY^} == N ]] && exit
Esta forma evita testarmos se a resposta dada foi um N (maiúsculo) ou um
n
Post by Julio C. Neves
(minúsculo).
No *Windows*, além dos vírus e da instabilidade, também são frequentes
nomes
Post by Julio C. Neves
de arquivos com espaços em branco e quase todos em maiúsculas. No exemplo
anterior, vimos como trocar os espaços em branco por sublinha (_), no
*$ cat trocacase.sh*
#!/bin/bash
# Se o nome do arquivo tiver pelo menos uma
#+ letra maiúscula, troca-a para minúscula
for Arq in *[A-Z]* *Pelo menos 1 minúscula*
do
if [ -f "${Arq,,}" ] *Arq em minúsculas já existe?*
then
echo ${Arq,,} já existe
else
mv "$Arq" "${Arq,,}"
fi
done
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Daniel Merli Morais
Pessoal, como converter apenas o primeiro caracter de cada palavra p/
João silva
Fulano ciclano
Maria oliveira
João Silva
Fulano Ciclano
Maria Oliveira
Com o sed consigo localizar o padrão espaço+minúscula: / [a-z]/, porém
não
Post by Julio C. Neves
Post by Daniel Merli Morais
consigo substituir a primeira letra após o espaço por sua correspondente
em
Post by Julio C. Neves
Post by Daniel Merli Morais
maiúscula. Disse a primeira letra após o espaço porque a primeira letra
de
Post by Julio C. Neves
Post by Daniel Merli Morais
cada linha já está em maiúscula no meu arquivo, então só precisaria me
preocupar com os sobrenomes.
Obrigado desde já.
--
"A maior virtude do sábio é mostrar-se ignorante diante daquilo que
desconhece"
Daniel Merli Morais
Enterprise Application Integration - Configuration Manager
Sprint / IBM Brasil
40hotmail.com>
Post by Julio C. Neves
Post by Daniel Merli Morais
LinkedIn: www.linkedin.com/in/dmerlimorais
[As partes desta mensagem que não continham texto foram removidas]
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
----------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação,
como perl, C etc. Quem insistir em não seguir esta regra será moderado sem
prévio aviso.
Post by Julio C. Neves
----------------------------------------------------------
----------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
Post by Julio C. Neves
----------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Moacir da Cruz Souza Filho
-Analista de Sistemas: Suporte Unix Avançado
Serviço Federal de Processamento de Dados
-Mestrando em Ciências da Computação
Universidade de Brasília
-Bacharel em Engenharia da Computação
Escola Politécnica de Pernambuco
Universidade de Pernambuco
-Técnico em Eletrônica
Escola Técnica Federal de Pernambuco
-Linux user #449600
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

Fabiano Caixeta Duarte
2010-01-20 02:42:36 UTC
Permalink
Post by Julio C. Neves
Fala Daniel,
Isso não vai resolver o teu problema especificamente,
Como não? :P
Post by Julio C. Neves
  -
  ${parâmetro^}
  -
  ${parâmetro,}
Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a caixa
das letras do texto que está sendo expandido. Quando usamos circunflexo (^),
a expansão é feita para maiúsculas e quando usamos vírgula (,), a expansão é
feita para minúsculas.
Uma primeira idéia a ser melhorada:

$cat arquivo
teste de conversao
segunda linha
ultima

while read; do
for i in $REPLY; do
echo -n "${i[0]^} "
done
echo
done < arquivo

Teste De Conversao
Segunda Linha
Ultima
--
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP
Julio C. Neves
2010-01-20 10:42:07 UTC
Permalink
Fala Fabiano,
só quero ver o dia que vc vai pagar o chope no Pinguim!... ;)

Usei a palavra específicamente, pq na primeira versão que saiu, esta
expansão era para todas as primeiras letras. Depois acharam por bem, colocar
somente a primeirona.

Isso significa que a primeira versão lançada, era uma resolução específica
para o problema apresentado pelo Daniel, mas da forma que ficou, temos de
usar algum artifício (como o que vc usou) para resolver o problema.

Creio que caso o teste seja feito em um arquivo de umas 1000 palavras (ou
mais) o sed do Moacir seja mais veloz.

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
Post by Fabiano Caixeta Duarte
Post by Julio C. Neves
Fala Daniel,
Isso não vai resolver o teu problema especificamente,
Como não? :P
Post by Julio C. Neves
-
${parâmetro^}
-
${parâmetro,}
Essas expansões foram introduzidas a partir do Bash 4.0 e modificam a
caixa
Post by Julio C. Neves
das letras do texto que está sendo expandido. Quando usamos circunflexo
(^),
Post by Julio C. Neves
a expansão é feita para maiúsculas e quando usamos vírgula (,), a
expansão é
Post by Julio C. Neves
feita para minúsculas.
$cat arquivo
teste de conversao
segunda linha
ultima
while read; do
for i in $REPLY; do
echo -n "${i[0]^} "
done
echo
done < arquivo
Teste De Conversao
Segunda Linha
Ultima
--
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Continue reading on narkive:
Loading...