[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