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: Wed, 25 Oct 2000 10:30:41 -0300


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


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

> 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.

ó não, fui intimado &:)

olha, e sed _dá_ pra fazer, mas eu aconselho outra ferramenta.
o próprio awk abaixo (que eu manjo nada) tá legal, curtinho.
o grande problema é que o sed não te um comando de
(des)capitalização como o toupper do awk, tem que fazer na mão
com o y/abcde...xyz/ABCDE...XYZ/


apenas como masturbação mental, tá aqui o cara com 3 sed's
seguidos. dá pra fazer em um só, mas aí fica muito pouco
didático...


conteúdo do txt:

TUDO MAIUSCULO.txt
tudo minusculo.txt
tUDo dOiDo.txt
varias VARIAS varias palaVRAS.txt


carinha:

cat txt | while read linha
do echo $linha |
   sed 's/^/ /;s/ \+/ /;
        y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;
        s/ \(.\)/\n \1\n/g' |
   sed '/^ /{y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;}' |
   sed ':a;$!N;s/\n//;ta;s/ //g'
done


resumo:

são 5 linhas de sed.

linha 1) normaliza os espaços em branco, cortando os seguidos.

Aurélio, já que vc é um dos idealizadores do filme "Querida Encolhi os
Scripts" ;) , vou dar uma encolhidinha no seu. Seguinte:
o final do primeiro sed, onde vc faz s/ \+/ / é desnecessário. Qdo vc fez
echo $linha, os espaços duplicados foram suprimidos e os <tab> viraram
espaço. Para que isso não acontecesse seria necessário fazer echo "$linha".

linha 2) descapitaliza todo o texto
linha 3) deixa a primeira letra após um espaço em branco (começo
         de palavra) em uma linha sozinha com um espaço em branco
         na frente

nesse momento, a primeira linha 'TUDO MAIUSCULO.txt' fica assim:


 t
udo
 m
aiusculo.txt


linha 4) capitaliza apenas as linhas que começam co espaço em 
         branco
linha 5) rearranja a linha quebrada em uma linha apenas, apagando
         os espaços em branco

fim.


eu avisei, com o awk é mais fácil nesse caso &:)

Mas qual das 3 soluções apresentadas (awk, sed ou a clássica) será a +
veloz?

Acho que muito poucos programadores brasileiros conseguiriam vislumbrar esta
"matada" que o Aurélio deu. Passei a bola para ele porque sabia que era gol
na certa!


From (no email address) Wed Oct 25 10:42:34 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_0); 25 Oct 2000 17:42:34 -0000
Received: (qmail 9532 invoked from network); 25 Oct 2000 17:40:48 -0000
Received: from unknown (10.1.10.26) by m4.onelist.org with QMQP; 25 Oct 2000 
17:40:48 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta1 with 
SMTP; 25 Oct 2000 17:40:39 -0000
Received: (qmail 5918 invoked from network); 25 Oct 2000 17:37:00 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 25 Oct 2000 17:37:00 -0000
Date: Wed, 25 Oct 2000 15:42:59 -0200 (BRST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] renomear arquivos
In-Reply-To: <4B813DAFDA55F14EA92BFABB590081A860BB5F@wtrjo081>
Message-ID: <Pine.LNX.4.21.0010251457430.929-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>

@ 25/10, Julio Cezar Neves - DISB.O:
> > aurélio escreveu:
> > 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
>
> O korn shell (ksh) tb faz tratamento de matrizes e vetores, além de
> instruções típicas para manipulação de numéricos e declaração de tipos de
> variáveis. No entanto evito usá-los, para manter a universalidade dos
> scripts e por estas facilidades do ksh serem muito pouco difundidas.
>
> Acho uma pena, que o bash2 não tenha tentado seguir tais padrões do ksh, de
> forma a incrementar o uso de ambos, que seria uma conseqüência lógica da
> padronização.
>
> Se vc quizer, te mando em pvt um bacalho q desenvolvi, há + de 5 anos, para
> testar estas implementações.

beleza julio, me mande por favor.

quanto ao bash2, não sei ao certo o motivo da escolha da sintaxe,
mas ela parece familiar a sintaxe das variáveis do bash, pois o
: já era utilizado como separador, como em ${var:-erro}.

e o bash2 é até incompatível em alguns aspectos do bash1 justo
por forçar mais a compatibilidade com o padrão POSIX, então de
repente a escolha pode ter algo a ver com o POSIX (não achei algo
sobre isso na documentação...)



> > ${var:0:1}
> > é o mesmo que cut -c1
> >
> > se quisesse os 4 primeiros (cut -c1-4), fica
> > ${var:0:4}



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



From (no email address) Wed Oct 25 10:53:28 2000
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-6_2_0); 25 Oct 2000 17:53:28 -0000
Received: (qmail 5089 invoked from network); 25 Oct 2000 17:53:27 -0000
Received: from unknown (10.1.10.26) by m2.onelist.org with QMQP; 25 Oct 2000 
17:53:27 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta1 with 
SMTP; 25 Oct 2000 17:53:17 -0000
Received: (qmail 10496 invoked from network); 25 Oct 2000 17:49:52 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 25 Oct 2000 17:49:52 -0000
Date: Wed, 25 Oct 2000 15:55:51 -0200 (BRST)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] renomear arquivos
In-Reply-To: <Pine.GSO.4.05.10010242042110.7969-100000@angra>
Message-ID: <Pine.LNX.4.21.0010251543230.929-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>

oi henrique,

@ 24/10, Henrique Limaverde Cabral de Lima:

> Valeu Aurelio, pela resposta. Decobri o que eu jah imaginava:
> + sed eh bem versatil, mas carece das estruturas de programacao de uma
>   linguagem normal (tudo bem, nao eh a ideia do sed). Toda vez que voce
>   quiser lidar com, por exemplo,  numero variavel de partes de uma linha,
>   vai ficar dificil.

pois é, ele é para manipulação de texto, nada mais.
mas existem técnicas para implementar condicionais e loop, que
são relativamente fáceis. também dá pra fazer, com complexidade
grande, comparação de tamanho entre strings e até cálculo!

se quiser veja o lendário dc.sed, onde o também lendário greg
ubben implementou a Desktop Calculator em sed. show de bola.
http://spazioweb.inwind.it/seders/scripts/dc.sed

mas claro, quando precisar dessas coisas, awk/perl/python/etc são
mais aconselhados.


> + eu conheco os comandos mas ainda falta um bocado pra dizer que sei jogar
>   (eh como xadrez, saber mover as pecas nao quer dizer muita coisa...)

exato.
mas isso não tem jeito. eu também passei um tempo com todos os
comandos na cabeça e não sabia como ou onde aplicá-los. o que me
ajudou muito a "ver a luz" foi a leitura do FAQ, dissecando cada
linha de comando e a entendendo (é em inglês).
http://www.cornerstonemag.com/sed/sedfaq.html

em português tem o sed-1linhers:
http://www.lrv.ufsc.br/wmaker/sed_ptBR.html


> + eu ainda apanho um pouquinho de regexp mais complexas. Quando eu preciso
>   termina saindo, mas leva algum tempo (aas vezes demais...)

pô, totalmente normal henrique &:)
mas você vai vendo que a medida que for fazendo mais expressões,
elas ficarão familiares, você começará a dominar os
monstrinhos. dominar monstrinhos... mmmm... isso parece pokemon &:)

depois que elas ficam familiares, sua preocupação maior fica
sendo lembrar sem na linguagem que você está utilizando o + deve
ser escapado ou não, se aceita o ?, e por aí vai...


> > ss pra avisar, temos uma lista de discussco do sed, em portugujs,
> > quem estiver interessado:
> >
> > address@hidden
>
> A proposito eu tambem estou nela. Soh que, como eu aceitaria uma resposta
> nao soh via sed, optei por esta lista :)

sem problema &:)
acho que é bom movermos essa discussão pra lá então, que acho que
acabou fugindo um pouco (nem tanto) do tópico da shell-script

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



reply via email to

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