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

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

RES: RES: [shell-script] renomear arquivos


From: Julio Cezar Neves - DISB.O
Subject: RES: RES: [shell-script] renomear arquivos
Date: Tue, 24 Oct 2000 20:34:36 -0300

Olá pessoal,
o maior barato desta linguagem é a diversidade de soluções que podemos dar
para cada problema.

Ai vai mais uma que eu diria que está escrita de forma mais "classica".

Já são 20:30h e estou no escritório desde as 8:40h, como estou cansado e com
fome, ela vai sem documentação ou comentário. Mas amanhã estou à disposição
para esclarecer qq dúvida.

[]s,
Julio

====================================>8CorteAqui8<===========================
=====================
#!/bin/sh
cat $1 |
while read Linha
do
    NovaLinha=
    for Palavra in $Linha
    do
        NovaPalavra=`echo $Palavra|cut -c1|tr"[a-z]" "[A-Z]"``echo
$Palavra|cut -c2-|tr "[A-Z]" "[a-z]"
        NovaLinha="$NovaLinha $NovaPalavra"
    done
    echo $NovaLinha | cut -c2- >> $1.novo
done

====================================>8CorteAqui8<===========================
=====================

-----Mensagem original-----
De: # aurelio marinho jargas [mailto:address@hidden]
Enviada em: terça-feira, 24 de outubro de 2000 20:07
Para: address@hidden
Assunto: Re: RES: [shell-script] renomear arquivos


@ 24/10, Henrique Limaverde Cabral de Lima:

> > Henrique, não vou nem responder só pra ver o "show de sed" que o Aurélio
> > Jargas (o rei do expressão regular) vai dar :o).
> > 
> > Acho o > barato analisar as "reg exp" rebuscadas que ele usa.
> 
> Pois eh, eu nao achei foi um jeito de transformar em maiusculas apenas uma
> parte da expressao (por exemplo "\\ [a-z]" :( A unica maneira que eu
> conheco de transformar maiusculas em minusculas eh com y///, mas ele se
> aplica aa linha toda nao?

exato, por isso na outra mensagem, tive que separar cada letra do
início de cada palavra numa linha exclusiva dela, para aplicar o
y///. é xunxo, mas funciona &:)


>    Tambem gostaria de ver uma solucao mais elegante (tenho ateh vergonha
> de mostrar esse que eu fiz :)

a do awk tá boa. creio que em perl dê pra fazer em 1 linha.
mas eu entendo lhufas de perl...


-- 
s·:(·>(·×^a]×http://www.verde666.org×^[:wq


Inscrição:     address@hidden

Sair da lista: address@hidden

Banco Dados:   http://www.egroups.com/group/shell-script

From (no email address) Tue Oct 24 15:37:34 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_1_0); 24 Oct 2000 22:37:34 -0000
Received: (qmail 89687 invoked from network); 24 Oct 2000 22:36:59 -0000
Received: from unknown (10.1.10.142) by m8.onelist.org with QMQP; 24 Oct 2000 
22:36:59 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta3 with 
SMTP; 24 Oct 2000 22:36:58 -0000
Received: (qmail 31588 invoked from network); 24 Oct 2000 22:33:50 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 24 Oct 2000 22:33:50 -0000
Date: Tue, 24 Oct 2000 20:39:40 -0200 (BRST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: RES: [shell-script] renomear arquivos
In-Reply-To: <Pine.GSO.4.05.10010242008480.7969-100000@angra>
Message-ID: <Pine.LNX.4.21.0010242028030.942-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>


aí henrique,

@ 24/10, Henrique Limaverde Cabral de Lima:
> > > parte da expressao (por exemplo "\\ [a-z]" :( A unica maneira que eu
> > > conheco de transformar maiusculas em minusculas eh com y///, mas ele se
> > > aplica aa linha toda nao?
> >
> > exato, por isso na outra mensagem, tive que separar cada letra do
> > início de cada palavra numa linha exclusiva dela, para aplicar o
> > y///. é xunxo, mas funciona &:)
>
> Aurelio,
>    aproveitando o ensejo... serah que nao dah pra fazer usando o
> registrador interno do sed? Digo, dah pra aplicar o y apenas no que
> estiver no registrador? Sei da existencia deles mas nunca parei pra
> brincar de swap :) Como dah pra notar, minha praia eh mais awk, apesar de
> eu jah ter usado um bocado de sed...

pô, awk está na minha lista de coisas-que-um-dia-vou-aprender &:)

quanto ao sed...
daria se fosse apenas uma substituição por linha, mas como é mais
de uma fica complicado... você sempre coloca no espaço reserva a
linha atual sendo tratada. dar dá, mas é complicado.

você poderia:
- copia para o espaço reserva a linha original.
- extrai o lixo e deixa apenas a primeira letra de cada palavra
- capitaliza elas

e agora. como colocar de volta no lugar certo cada letra
maiúscula? se fosse um número fixo, por exemplo sempre 3 palavras
para cada nome de arquivo, um s/// macho resolveria, mas como é
variável, não dá pois depois você precisa referenciar o número
exato pelos \1, \2 da vida...

no 'sed grab-bag' tem 5 exemplos de como capitalizar a primeira
letra de cada palavra. alguns usam o espaço reserva, mas note
quea complexidade aumenta consideravelmente &:)

http://spazioweb.inwind.it/seders/scripts/cflword1.sed
http://spazioweb.inwind.it/seders/scripts/cflword2.sed
http://spazioweb.inwind.it/seders/scripts/cflword3.sed
http://spazioweb.inwind.it/seders/scripts/cflword4.sed
http://spazioweb.inwind.it/seders/scripts/cflword5.sed


só pra avisar, temos uma lista de discussão do sed, em português,
quem estiver interessado:

address@hidden

e tem algumas informações em:

http://www.conectiva.com.br/~aurelio/sed



--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq


From (no email address) Tue Oct 24 15:46:20 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_1_0); 24 Oct 2000 22:46:20 -0000
Received: (qmail 21115 invoked from network); 24 Oct 2000 22:45:47 -0000
Received: from unknown (10.1.10.26) by m8.onelist.org with QMQP; 24 Oct 2000 
22:45:47 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta1 with 
SMTP; 24 Oct 2000 22:45:46 -0000
Received: (qmail 338 invoked from network); 24 Oct 2000 22:42:35 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 24 Oct 2000 22:42:35 -0000
Date: Tue, 24 Oct 2000 20:48:24 -0200 (BRST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: RES: RES: [shell-script] renomear arquivos
In-Reply-To: <4B813DAFDA55F14EA92BFABB590081A860B7C9@wtrjo081>
Message-ID: <Pine.LNX.4.21.0010242042280.942-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>

@ 24/10, Julio Cezar Neves - DISB.O:

> Olá pessoal,
> o maior barato desta linguagem é a diversidade de soluções que podemos dar
> para cada problema.
>
> Ai vai mais uma que eu diria que está escrita de forma mais "classica".

é isso aí julio!
para complementar, uma dica de bash2, que tem matrizes e uns
conceitinhos legais que em determinadas situações, dispensam o
uso de cut e sed


> #!/bin/sh
> cat $1 |
> while read Linha
> do
>     NovaLinha>     for Palavra in $Linha
>     do
>         NovaPalavra=`echo $Palavra|cut -c1|tr"[a-z]" "[A-Z]"``echo
> $Palavra|cut -c2-|tr "[A-Z]" "[a-z]"

essa linha e bash2 pode ser:

          NovaPalavra=`echo ${Palavra:0:1}|tr "[a-z]" "[A-Z]"``echo
  ${Palavra:1}|tr "[A-Z]" "[a-z]"


>         NovaLinha="$NovaLinha $NovaPalavra"
>     done
>     echo $NovaLinha | cut -c2- >> $1.novo

e essa:
      echo ${NovaLinha:1} >> $1.novo



pra quem manja de C e afiliados, é tipo a função substr() ou
coisa assim, onde

${var:0:1}

quer dizer, me dê o conteúdo de $var, caminhando 1 passo a partir
da posição 0

é o mesmo que cut -c1

se quisesse os 4 primeiros (cut -c1-4), fica

${var:0:4}

e por aí vai...


esses dias fiz meu primeiro programa usando as funcionalidades
novas do bash2 e devo dizer que parece outra linguagem! nenhum
sed ou cut foi utilizado e ele basicamente faz apenas manipulação
de texto. muito massa.

--
s·:(·>(·×^a]×http://www.verde666.org×^[:wq



reply via email to

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