shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Contando palavras dentro de um string


From: Helder Jean
Subject: Re: [shell-script] Contando palavras dentro de um string
Date: Fri, 19 Sep 2003 21:06:48 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030707

Rodolfo Villanova - TmS Brasil wrote:
Caros amigos,


Montei um script em Korn Shell (ambiente SunOs 2.8) que, entre "otras
cocitas", executa uma consulta SQL que retorna o conteúdo de dois campos de
uma tabela em um BD:

NOME e DATA.

O campo NOME é composto de um nome e 1 ou + sobrenomes.
O conteúdo do campo DATA é óbvio.

A chamada à função se dá atribuindo sua execução à uma variável, ou seja:

RET=`consultaSQL $CPF`

O que for atribuído à variável RET ou é um erro Oracle ou são os dados que
necessito.

Se os dados fossem simplesmente passados como parâmetros para uma função,
beleza: bastaria saber quantos são esses argumentos, e trabalharía-os
"shiftando" argumentos até acabar.

O "pobrema" é que o retorno é um string.
O que eu quero pegar nesse string é o nome, último sobrenome e a data
retornada.
(corta)

  Fiquei curioso e quebrei a cabeça pra ver se conseguia fazer esse. :)
  Testei num SunOS 5.8 com korn shell e funcionou direitinho, olha aí:

  # cat teste.txt
Fulano da Silva 19/09/2003
Sicrano Junior 18/09/2003
Beltrano Silva Junior 17/09/2003
Jose 16/09/2003
  # cat teste.txt | sed 's/ \([0-9/]*\)$/:\1/g; s/\ .*\ / /g; s/:/ /g'
Fulano Silva 19/09/2003
Sicrano Junior 18/09/2003
Beltrano Junior 17/09/2003
Jose 16/09/2003

  O que o sed tá fazendo:
s/ \([0-9/]*\)$/:\1/g --> Substitui qualquer sequência de números e barras, que iniciem com um espaço e estejam no final da linha, pela mesma sequênca com um dois-pontos no lugar do espaço. s/\ .*\ / /g --> Substitui qualquer coisa que comece e termine com um espaço por espaço. Assim ele acaba com os nomes do meio, já que o último nome não é separado da data por espaço, e sim por dois-pontos. s/:/ /g --> Tira o dois-pontos que colocamos no início e coloca o espaço de volta.

  Seria isso que você queria? Espero que sim.

[]'s


--
Helder Jean  <Helder.J[at]gmx.net>
Engenharia de Computação - UFRN - http://www.ufrn.br
Gerência de Redes - Superintendência de Informática - UFRN
Linux Registered User #229979
GnuPG KeyID: 0x46EE1E86
----------------------------------------------------------




reply via email to

[Prev in Thread] Current Thread [Next in Thread]