[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
- RES: RES: [shell-script] renomear arquivos,
Julio Cezar Neves - DISB.O <=